sql-server - 在 SQL Server 中使用“@”拆分
问题描述
当前结果:
Data
-----
1@2@3@4@5@6
预期结果:
Data1 Data2 Data3 Data4 Data5 Data6
----------------------------------------
1 2 3 4 5 6
尝试使用SUBSTRING()
, LEFT()
,CHARINDEX()
但没有帮助。
谁能告诉我,我错过了什么?
解决方案
尝试:
DECLARE @Var NVARCHAR(MAX)
SET @Var ='1@2@3@4@5@6'
DECLARE @XML AS XML
DECLARE @Delimiter AS CHAR(1) ='@'
SET @XML = CAST(('<X>'+REPLACE(@Var,@Delimiter ,'</X><X>')+'</X>') AS XML)
DECLARE @temp TABLE (ID INT,name NVARCHAR(MAX))
INSERT INTO @temp
SELECT N.value('.', 'INT') AS ID, 'data' + CONVERT(Nvarchar,N.value('.', 'INT')) as name
FROM @XML.nodes('X') AS T(N)
SELECT *
FROM @temp
PIVOT
(
MAX(id)
FOR name IN ([data1],[data2],[data3],[data4],[data5],[data6])
) PIV;
结果:
data1 data2 data3 data4 data5 data6
1 2 3 4 5 6
使用动态 SQL:
SELECT *
INTO ##temp
FROM @temp
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT ',' + QUOTENAME(name)
from @temp
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
SET @query = N'SELECT *
FROM
##temp
PIVOT
(
MAX(id)
FOR name IN (' + @cols + N')
) PIV'
EXEC(@query)
DROP TABLE ##temp
推荐阅读
- android - Firebase getValue() 返回 null
- javascript - 什么是 Javascript ?操作员?
- linux - 为什么 accept() 返回 ERESTARTSYS?
- python - Python / Django - 编辑渲染输出
- windows - 在 w3wp 中识别导致 CPU 过高的模块
- shared-libraries - 如何区分同名的共享库和静态库
- r - 数据表,与不寻常的格式化表融为一体
- c - 仅使用 CMake 检测到堆损坏
- angular - 为什么定义模型中的“_id”时webstorm(TSLINT)中的角度会向我发送警报?
- javascript - 尝试在第二个 h2 标签之前插入内容