MySQL中修改字段值的前缀或后缀 您所在的位置:网站首页 mysql数据库后缀和表后缀 MySQL中修改字段值的前缀或后缀

MySQL中修改字段值的前缀或后缀

2023-08-12 04:47| 来源: 网络整理| 查看: 265

背景:

因为项目整合需要,需要将几个子项目整合成一个项目发布,但之前开发过程中设置跳转的URL前缀是以各个子项目前缀命名的,现在需要将那些子项目的前缀统一成一个名字。因此需要修改保存URL数据表中的记录的前缀。

如下图所示:需要将FORMURL字段保存的值中前缀为roll和sr值修改成前缀为sw,其他值不变。

分析: 1. 修改数据表中的值

最常见的思路有两种:

修改时用子查询限定修改的内容,并设置对应的值。(这种设置的值比较固定)修改时用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 实验室设备网 版权所有