文章目录
- SQL实现将数据表中的字段中的值按分隔符分成多列
-
- 1. 建表
- 2. 插入数据
- 3. 需求分析
- 4. 实现代码
- 5. 案例代码
- 6. 实现效果
SQL实现将数据表中的字段中的值按分隔符分成多列
原始表格:
文章图片
工作需求:将上表的class_all字段的数据已分号进行分割,生成下表:
文章图片
1. 建表
建表SQL:
CREATE TABLE [dbo].[test_table](
[id] nvarchar(max)NOT NULL,
[class_all] nvarchar(max) NULL
)
2. 插入数据
insert into test_table VALUES ('1','111;
222;
333');
insert into test_table VALUES ('2','444;
555');
insert into test_table VALUES ('3','');
3. 需求分析
根据
class_all
字段已分号进行分割,然后一个类别一个分组,并且前面是对应的id4. 实现代码
只需要修改表名,查询字段1,分割字段,结果字段名 ,分隔符即可!!!
WITH 表名
AS
(
SELECT
查询字段1,
结果字段名 = CAST(LEFT(REPLACE(分割字段, ' ', ''),CHARINDEX('分隔符',REPLACE(分割字段,' ', '') + '分隔符')-1) AS NVARCHAR(MAX)) ,
Split = CAST(STUFF(REPLACE(分割字段, ' ', '') + '分隔符',1,CHARINDEX('分隔符',REPLACE(分割字段, ' ','') + '分隔符'), '') AS NVARCHAR(MAX))
FROM dbo.表名
WHERE 分割字段 IS NOT NULL
UNION ALL
SELECT
查询字段1,
结果字段名 = CAST(LEFT(Split,CHARINDEX('分隔符', Split) - 1) AS NVARCHAR(MAX)) ,
Split = CAST(STUFF(Split, 1, CHARINDEX('分隔符', Split), '') AS NVARCHAR(MAX))
FROM 表名
WHERE Split > ''
)
SELECT 查询字段1,结果字段名 FROM 表名
5. 案例代码
WITH test_table -- 表名
AS
(
SELECT
id,
class = CAST(LEFT(REPLACE(class_all, ' ', ''),CHARINDEX(';
',REPLACE(class_all,' ', '') + ';
')-1) AS NVARCHAR(MAX)) ,
Split = CAST(STUFF(REPLACE(class_all, ' ', '') + ';
',1,CHARINDEX(';
',REPLACE(class_all, ' ','') + ';
'), '') AS NVARCHAR(MAX))
FROM dbo.test_table
WHERE class_all IS NOT NULL
UNION ALL
SELECT
id,
class = CAST(LEFT(Split,CHARINDEX(';
', Split) - 1) AS NVARCHAR(MAX)) ,
Split = CAST(STUFF(Split, 1, CHARINDEX(';
', Split), '') AS NVARCHAR(MAX))
FROM test_table
WHERE Split > ''
)
SELECT id,class FROM test_table
6. 实现效果
【SqlServer入门到精通|SQL实现将数据表中的字段中的值按分隔符分成多列】效果如下:
文章图片
推荐阅读
- SQL每日一练|SQL每日一练(牛客新题库)——第2天( 条件查询)
- 个人学习|牛客网在线编程题库——个人练习打卡记录(暂时停止)
- MySQL时区问题
- 用户故事分享(vika维格表助力公益知识库项目落地)
- 应用案例|数据分析初学入门——22本SQL学习书籍推荐
- read|mysql双主热备简单部署
- MySQL|MySQL备份与恢复+策略方案选择
- mysql|mysql sql语句面试经典50题_常见的SQL面试题(经典50题(简单))
- 数据库|MySQL的四种事务隔离级别