sql语句将数据库一条数据通过分隔符切割成多列方法实例
作者:二次元程序码农 时间:2024-01-15 02:24:45
sql语句,将数据库一条数据通过分隔符切割成多列 需求场景应对措施效果展示具体代码
需求场景
在实际场景之中,我们有时候会遇到一种情况,就是数据库中某一字段存了很长的一段字符串,里面用了分隔符进行分割,但是很不直观,你想查一下数据库把这个字段下的数据,按分隔符切割出来,并划分到下面几列上面,但又苦于只能写sql。这种情况下应该怎么办呢。
应对措施
首先这种情况下,sql是可以完全满足需求的。sql在代码中不仅可以用curd,更可以对数据的查询做一些操作,但是注意不要出现慢查询。
话题转回来,无论是写Java还是写SQL,首先都要对需求有一个实现的思路,这里我的思路是:
因为不知道这个字段下各个数据的长度,所以不能用substring_index进行简单的划分,需要像剥洋葱那样一层一层的剥下来,所以需要用两个substring_index嵌套来进行切割,那切割的过程中怎么去让数据也就是洋葱皮从第一层到第二层。这里就涉及到对自增序列的使用。
大家肯定知道在联表查询的时候,需要对两个表命名别名,这里我们的操作也是一样一个命名为t用来展示数据,一个命名为d用来通过切割后,将多余的数据向下用列来进行展示。
所以在上面进行切割的时候,最里面的选中第几层数据的substring_index里面的第三个参数就使用d里面的自增id来进行实现,当然也可以选择其他拥有自增属性的字段,因为这里我们并不需要它的数据,而是需要它的自增属性,来代替while或者for中的那个i++来让数据向下命中下一个分隔符继续切割下去,而最外层的substring_index就用来选择展示多长的数据就好了。
做完上面的切割,并且拥有了可以向下一分隔符切割的手段之后,怎么让这段代码循环起来呢。一般可以使用while来进行。但是我们之前用到了id的自增属性,所以这里我们依旧使用这个属性,并且用join字段,计算出每条数据中切割后数据的长度后。通过id++来进行循环。(因为切割只能切割一回,所以这里使用的是replace来将分隔符替换为‘’数据,实现分隔符的消失。
效果展示
这里需要对value数据进行切割,并展示variable数据,id为自增主键。
通过查询语句查询之后将数据分列之后展示,如果需要id自增,大家可以对第一个t.id自行修改。
具体代码
作为一个开发人员,思路和对业务的分析永远是最重要的,代码的实现不过是最后对于解题成果的展示。这里附加上我的SQL代码,供大家品鉴。
SELECT
t.id,
t.variable,
substring_index(
substring_index(
t.value,
',',
b.id
),
',', -1
) AS value
FROM
sys.sys_config t
JOIN sys.sys_config b ON b.id <= (
length(t.value) - length( REPLACE ( t.value, ',', '' )) + 1
);
来源:https://blog.csdn.net/qq_43881656/article/details/127230250