当前位置:网站首页>SQL实现将数据表中的字段中的值按分隔符分成多列
SQL实现将数据表中的字段中的值按分隔符分成多列
2022-07-15 15:34:00 【无 羡ღ】
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. 实现效果
效果如下:

边栏推荐
- virtual box挂载共享文件夹
- Information system project managers must recite the core examination points (I) six elements of the national information system
- CRC16 verification
- 【综合笔试题】难度 2/5,递归运用及前缀和优化
- Salesforce中解析合并字段Merge Fields
- Fail-Fast & Fail-Safe
- Considérations relatives à la mise en œuvre du modèle d'influence de la campagne dans Salesforce
- Cool dog music interface is amazingly open
- 散户证券开户哪个券商平台好,哪个更安全
- Salesforce email sent to spam mailbox or SF email processing method not received (dkim - New CNAME version)
猜你喜欢

freeswitch的话单模块

曲线上点的曲率半径计算

Core examination site for information system project managers (XI) two key technologies and architectures of the Internet of things

NiFi集群搭建及必要的相关配置

sx126x 与 sx127x 的区别

阿里云E-MapReduce 极客大赛开放报名 数十万奖金等你挑战

Doxygen的安装与使用及注释语法

象棋一本通

Huawei image xmage: seek all the images in the world, and finally see the Bodhi Heart

12306 ticket grabbing tools shock and attack
随机推荐
Cjson usage
Create a 12g logical volume with one disk and three 5g partitions
小bai挑战学c语言第七天----枚举、结构体、共用体
nifi ListSFTP等代理设置
Salesforce中使用LWC本地开发
Core examination site for information system project managers (XI) two key technologies and architectures of the Internet of things
LSM storage model
volatile低配版syn,实现可见性和有序性
最常用的chrome浏览器控制台的调试技巧,你看你知道不。
象棋一本通
[7.8-7.15] review of wonderful technical blog posts in the writing community
What fault simulation does the chaosblade now support for the database? Do the teachers have any information?
Considérations relatives à la mise en œuvre du modèle d'influence de la campagne dans Salesforce
The difference between sx126x and sx127x
freeswitch的话单模块
【综合笔试题】难度 2/5,递归运用及前缀和优化
游戏有什么用?| 游戏应用价值研究案例征集
datatable删除行
蚂蚁隐私计算创新TEE技术获学术认可
高效率学习工具及插件分享