SQL Server2008中CROSS APPLY的应用范例(二) - 将一个或多个字段内用逗号分隔的内容分成多条记录
来源:互联网 发布:沙特投资歼31知乎 编辑:程序博客网 时间:2024/06/05 16:21
SQL Server2008中CROSS APPLY的应用范例(二)
——将一个或多个字段内用逗号分隔的内容分成多条记录
本文已经有最新版本:SQL Server2008中CROSS APPLY的应用范例(三) - 将一个或多个字段内用逗号分隔的内容分成多条记录
DECLARE @DutyLst VARCHAR(MAX);DECLARE @DutyNames NVARCHAR(MAX);SET @DutyLst = '793f2b96-0818-491f-839a-3bf431da6879/14a95c8e-e710-49fa-8b2e-579c9ae46984,793f2b96-0818-491f-839a-3bf431da6879/ed5a4bbe-54db-41f7-81fc-97831e00c8ac';SET @DutyNames = N'集团/上海/总经理,集团/上海/部门经理';SELECT N.v.value('.' , 'varchar(100)') AS DutySN, M.v.value('.' , 'varchar(100)') AS DutyName FROM (SELECT [idLst] = CONVERT(XML , '<v>' + REPLACE(@DutyLst , ',' , '</v><v>') + '</v>'),[nameLst] = CONVERT(XML , '<v>' + REPLACE(@DutyNames , ',' , '</v><v>') + '</v>')) A CROSS APPLY A.[idLst].nodes('/v') N( v ) CROSS APPLY A.[nameLst].nodes('/v') M( v )
查询结果
DutySN DutyName
---------------------------------------------------------------------------------------------------------------------------------------------------------
793f2b96-0818-491f-839a-3bf431da6879/14a95c8e-e710-49fa-8b2e-579c9ae46984集团/上海/总经理
793f2b96-0818-491f-839a-3bf431da6879/14a95c8e-e710-49fa-8b2e-579c9ae46984集团/上海/部门经理
793f2b96-0818-491f-839a-3bf431da6879/ed5a4bbe-54db-41f7-81fc-97831e00c8ac集团/上海/总经理
793f2b96-0818-491f-839a-3bf431da6879/ed5a4bbe-54db-41f7-81fc-97831e00c8ac集团/上海/部门经理
请参考:SQL Server2008中CROSS APPLY的应用范例-将多个不同值更新到不同条件匹配的记录中
如果需要将两个列表解析后写入一条记录的多个字段中,可以采用如下方案:
/*
列表格式:
编号1=数量1,异常数量1;编号2=数量2,异常数量2[,...[,...]]
*/
DECLARE @GoodsCountLst VARCHAR(MAX);SET @GoodsCountLst = '1=22,3;2=132,0';DECLARE @tblActual TABLE(A_ID BIGINT,A_Amount BIGINT,A_Exception BIGINT);INSERT INTO @tblActual(A_ID, A_Amount, A_Exception) SELECT B.ID, B.Amount, B.Exception FROM (SELECT [value] = CONVERT(XML , '<v>' + REPLACE(@GoodsCountLst , ';' , '</v><v>') + '</v>')) A CROSS APPLY (SELECT ID = SUBSTRING(N.v.value('.' , 'varchar(100)'), 1, charindex( '=', N.v.value('.' , 'varchar(100)')) - 1 ), Amount = SUBSTRING(N.v.value('.' , 'varchar(100)'), charindex( '=', N.v.value('.' , 'varchar(100)')) + 1, charindex( ',', N.v.value('.' , 'varchar(100)')) - charindex( '=', N.v.value('.' , 'varchar(100)')) - 1), Exception = SUBSTRING(N.v.value('.' , 'varchar(100)'), charindex( ',', N.v.value('.' , 'varchar(100)')) + 1, LEN(N.v.value('.' , 'varchar(100)'))) FROM A.[value].nodes('/v') N ( v ) ) B;SELECT * FROM @tblActual;
- SQL Server2008中CROSS APPLY的应用范例(二) - 将一个或多个字段内用逗号分隔的内容分成多条记录
- SQL Server2008中CROSS APPLY的应用范例(三) - 将一个或多个字段内用逗号分隔的内容分成多条记录
- SQL 将一个字段内用逗号分隔的内容分成多条记录
- SQL 将一个字段内用逗号分隔的内容分成多条记录
- SQL 将一个字段内用逗号分隔的内容分成多条记录
- SQL Server2008中CROSS APPLY的应用范例(一)-将多个不同值更新到不同条件匹配的记录中
- 一字段含有逗号分隔的串,如何把这条记录按分隔符分成多
- SQL Server2008中将SELECT语句返回的多条记录转换以逗号分隔的字符串
- 将一行逗号分隔的文本分成多行记录的SQL语句
- 如何在mysql中通过逗号分隔的字段在另一张表中查到多条记录
- SQL Server 将一个字段的内容按逗号分隔成多行显示
- 把逗号分隔的列拆成多行 cross APPLY
- 怎么根据一条记录中某个字段的值,将此记录分成多条显示?
- oracle 逗号分隔的字符串列字段查询列出多条记录
- 将逗号分隔的字段拆解成记录
- SQL Server中如何将一个字段的多个记录值合成一起显示
- SQL 拼接多个字段的值&一个字段多条记录的拼接
- SQL 拼接多个字段的值&一个字段多条记录的拼接
- 关于球型Shader的写法
- 使用insert 语句插入另一个表和几个传入数据时,写法:
- H5+app如何使用session 服务端为PHP
- SHELL入门教程(6)-环境
- js和jq在实际开发中比较好用的方法总结
- SQL Server2008中CROSS APPLY的应用范例(二) - 将一个或多个字段内用逗号分隔的内容分成多条记录
- 使用MySql数据库创建表空间,日志
- Andoid基础学习_1
- [BZOJ1601] [Usaco2008 Oct]灌水
- sql server2008数据库备份作业
- Hduoj1869【Floyd】
- jquery validationengine验证
- webstorm+nodejs+JetBrains IDE Support+chrome打造前端开发神器
- 从庖丁解牛说uboot如何编译