SQL实现将数据表中的字段中的值按分隔符分成多列
SQL 实现 数据表 多列 分隔符 分成
2023-09-14 09:14:23 时间
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
字段已分号进行分割,然后一个类别一个分组,并且前面是对应的id
4. 实现代码
只需要修改表名,查询字段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. 实现效果
效果如下:
相关文章
- 删除Oracle数据库中的列——SQL实现(oracle删除列sql)
- MySQL轻松实现快速导入SQL文件(mysql快速导入sql文件)
- 使用SQL新增MySQL表字段的技巧(mysql新增字段sql语句)
- 分表架构优化——使用SQL Server实现分库分表(sqlserver分库)
- MongoDB实现“SQL NoSQL”合一(mongodb支持sql)
- SQL到Oracle的数据迁移之路(sql转换oracle)
- Linux下实现SQL语句的操作(linux执行sql语句)
- 从零开始:Oracle建库的SQL指南(oracle建库sql)
- Oracle如何实现动态执行SQL语句?(oracle动态执行)
- 玩转Redis:使用它替代SQL查询(redis实现sql查询)
- 如何使用MySQL合并SQL数据?(mysql合并sql)
- SQL Server分支技术:实现高效开发(sqlserver 分支)
- 建模开发:用SQL Server实现数据库的升级(sqlserver1)
- MSSQL实现SQL注入防护的完美解决方案(mssql 防sql注入)
- 使用SQL Server执行SQL文件的最佳实践(sqlserver执行sql文件)
- Oracle通过SQL脚本实现快速操作(oracle执行sql脚本)
- 基于SQL Server的R语言实现(r sqlserver)
- SQL取用Redis缓存技术实现数据提速(sql读取redis缓存)
- 在SQL中使用Redis实现数据存储(sql 操作redis)
- Oracle中编写SQL脚本实现持续创新(oracle中sql脚本)
- Oracle中使用SQL实现取整(oracle中sql取整)
- Oracle中SQL的分类与应用(oracle中sql分类)
- 的order byOracle SQL中的Order By语法实现的排序(oracle中sql中)
- Oracle SQL实现转码从无到有(oracle sql转码)