MySQL中修改字段值的前缀或后缀 | 您所在的位置:网站首页 › mysql数据库后缀和表后缀 › MySQL中修改字段值的前缀或后缀 |
背景:
因为项目整合需要,需要将几个子项目整合成一个项目发布,但之前开发过程中设置跳转的URL前缀是以各个子项目前缀命名的,现在需要将那些子项目的前缀统一成一个名字。因此需要修改保存URL数据表中的记录的前缀。 如下图所示:需要将FORMURL字段保存的值中前缀为roll和sr值修改成前缀为sw,其他值不变。 最常见的思路有两种: 修改时用子查询限定修改的内容,并设置对应的值。(这种设置的值比较固定)修改时用case when搜索限定修改的内容和值。(设置的值当成变量处理,非常灵活)针对这儿修改前缀的情况,它修改后的值不是固定的,所以最佳做法是使用case when处理,这种可将设置的值当成变量的形式处理。 2.字符串前缀处理 处理字符串,首先想到的就是用 CONCAT(str,str1 ...) 拼接字符串,将前缀 sw 放在最前面,然后拼接上 URL 前缀后面的部分就可以了。那么如何取 URL 前缀后面的那部分呢? 字符串截取:RIGHT(str, n) 返回字符串 str 的后 n 个字符;根据上面函数,我们只需要知道字符串总长度和前缀长度就可以得到n。要知道字符串的长度,用 CHAR_LENGTH(str) 取到字符串的长度;要知道前缀长度,可根据前缀后面的分割符所在位置取到。LOCATE(subStr, str) :从字符串 str 中获取 subStr 的开始位置,找不到返回0。若处理的是字符串后缀,可用类似的方式处理。 实现:test_table为表名,FORMURL为需要修改的属性名。 UPDATE test_table SET FORMURL = ( -- CASE WHEN 搜索函数 CASE WHEN ( -- 搜索这两种条件 (FORMURL LIKE 'sr%') OR (FORMURL LIKE 'roll%') ) THEN -- 字符串拼接 CONCAT( 'sm', -- 字符串截取:获取前缀后面部分字符串 RIGHT ( FORMURL, -- 计算出前缀后面部分长度 (CHAR_LENGTH(FORMURL) - LOCATE('System', FORMURL) + 1) ) ) ELSE -- 若没有搜索到对应的结果,则不改变值。注意:如果不加这个,若没搜索到对应的结果就会将该属性值置为空 FORMURL END ); 总结: CASE WHEN的搜索用法非常强大且灵活,在做数据修复SQL时第一个想到的就是它。MySQL内置的字符串处理函数非常丰富,上面的处理方法不一定是最佳的,可了解更多的字符串处理函数优化SQL。贴出MySQL内置函数,供以后学习参考:https://www.runoob.com/mysql/mysql-functions.html |
CopyRight 2018-2019 实验室设备网 版权所有 |