使用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;

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
)">
下一篇>>