【问题标题】:Split with '@' in SQL Server [duplicate]在 SQL Server 中使用“@”拆分 [重复]
【发布时间】:2019-05-22 13:46:14
【问题描述】:

当前结果:

Data
-----
1@2@3@4@5@6

预期结果:

Data1  Data2  Data3  Data4  Data5  Data6 
----------------------------------------
1      2      3      4      5      6

尝试使用SUBSTRING()LEFT()CHARINDEX(),但没有帮助。

谁能告诉我,我错过了什么?

【问题讨论】:

  • 列数总是6吗?另外,张贴您尝试过的确切内容。它会表明你在问一个相当琐碎的问题之前已经付出了一些努力。
  • 您之前曾走过这条路 - 使用分隔符拆分字符串。解决方法是一样的。

标签: sql-server split char substring


【解决方案1】:

试试:

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

【讨论】:

    【解决方案2】:

    试试这个:

    SELECT value FROM STRING_SPLIT('1@2@3@4@5@6', '@');
    

    the result here

    【讨论】:

    • 这不是 OP 要求的结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多