系统城装机大师 - 固镇县祥瑞电脑科技销售部宣传站!

当前位置:首页 > 数据库 > MsSql > 详细页面

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

时间:2023-03-11来源:系统城装机大师作者:佚名

需求场景

在实际场景之中,我们有时候会遇到一种情况,就是数据库中某一字段存了很长的一段字符串,里面用了分隔符进行分割,但是很不直观,你想查一下数据库把这个字段下的数据,按分隔符切割出来,并划分到下面几列上面,但又苦于只能写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代码,供大家品鉴。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
);

总结

到此这篇关于sql语句将数据库一条数据通过分隔符切割成多列的文章就介绍到这了

分享到:

相关信息

系统教程栏目

栏目热门教程

人气教程排行

站长推荐

热门系统下载