sql语句将数据库一条数据通过分隔符切割成多列方法实例

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

%s 个评论

要回复文章请先登录注册