使用sql语句实现字符串根据逗号分隔并减一重新赋值
sql操作
前言
事情的起因是因为我们的数据需要对接另一方的数据,但是在将对方数据导入到我们数据库的时候发生了数据的错乱,比如:交通方式,我们是从0开始,0代表飞机1代表火车,他们则是1代表飞机2代表火车,多选是以逗号进行分割。也就是我们在进行数据导入的时候需要对数据进行操作,在修改代码之前导入的数据肯定是不正确的,需要将数据进行修改。
一、查询所有需要操作的数据
1、首先做的就是条件查询需要修改的哪些数据,这里使用like '%,%' ,查询出所有多选的数据。并且使用 LENGTH(type) < 4 函数,筛选出有两个条件的数据进行操作,然后再操做三个条件的。
2、使用 SUBSTR(type,3,1) 函数进行分割,其中第一位type代表的是需要分割的字段。第二位代表的是要从第几个字符开始分割也就相当于索引,字符也包含逗号,也就是如果是3个数,1,2,3这样的我们需要截取1,3,5索引位置的字符。第三位代表的是截取字符的个数,我们选择1,如果选择2的话会将逗号也包含在内了。截取出来的数据进行减一,达到我们的初步效果。
3、使用CONCAT() 函数将处理好的数据进行拼接,注意将逗号也拼接上去。
至此,我们将处理好的数据查询出来了,查看结果是否达到了我们效果,达到之后就要进行修改了。效果如下图:
sql语句如下:
SELECT CONCAT(SUBSTR(type,1,1) -1,',',SUBSTR(type,3,1) -1) sub ,type from test where type like '%,%' and LENGTH(type) < 4
二、替换旧数据
将数据处理查询出来之后,我们要做的就是将处理后的数据覆盖掉之前的数据,也就是使用update语句将字段更新,刚开始书写了错我的语句,错误语句如下:
UPDATE test set
type = (
SELECT CONCAT(SUBSTR(type,1,1) -1,',',SUBSTR(type,3,1) -1) type from test where LENGTH(type) < 4 and type like '%,%')
执行语句后报错:
将SELECT出的结果再通过中间表SELECT一遍,这样就规避了错误:
UPDATE test
SET type= (
SELECT
t.type
FROM
(
SELECT
CONCAT( SUBSTR( type, 1, 1 ) - 1, ',', SUBSTR( type, 3, 1 ) - 1 ) type
FROM
test
WHERE
LENGTH( type) < 4
AND sub_test LIKE '%,%'
) t
)
WHERE
id = 1;