【问题标题】:how to split comma separated string in sql server into n-number of columns如何将sql server中的逗号分隔字符串拆分为n列
【发布时间】:2018-05-04 12:01:22
【问题描述】:
  1. 我有一个表 tb1,其中有一列 OppName 为:(8-values in 一行 csv)

    ["OpportunityName","Fact","","","StartDate","EndDate","IsActive","UpdateDate"]
    

    我正在尝试将每个逗号分隔的值拆分为单独的 列为:

          c1              c2      c3 c4 c5 c6 c7          c8
    "OpportunityName"   "Fact"    .........            "UpdateDate"
    

    我所做的是:

    第 1 步: 从字符串中删除 [] 为:

       UPDATE tb1 
       SET [OppName] = REPLACE(REPLACE([OppName], '[', ''), ']', '')
    
    # output: "OpportunityName","Fact","","","StartDate","EndDate","IsActive","UpdateDate"
    

    第 2 步: 在 vars 中拆分字符串并将所有 vars 插入到 tb2 中的每一行:

    DECLARE @list varchar(8000)
    DECLARE @pos INT
    DECLARE @len INT
    DECLARE @value varchar(8000)
    DECLARE @x nvarchar(max)
    
    SET @list = '"OpportunityName","Fact","","","StartDate","EndDate","IsActive","UpdateDate",'
    
    set @pos = 0
    set @len = 0
    
    WHILE CHARINDEX(',', @list, @pos+1)>0
    BEGIN
        set @len = CHARINDEX(',', @list, @pos+1) - @pos
        set @value = SUBSTRING(@list, @pos, @len)
        set @value = REPLACE (@value, '"', '')       
        PRINT @value -- for debug porpose  
        set @pos = CHARINDEX(',', @list, @pos+@len) +1
        --Append values to x
        set @x =  (@x  +','+ @value) 
    END
    
      PRINT @x
       --Inserting in tb2
      Insert into  tb2 values(@x)
    

    但字符串连接不正确

    有人可以帮我吗

【问题讨论】:

  • 您是否检查过您的字符串中是否有逗号?例如“事实,事实2,事实3”?这会打破你的分裂方法。此外:您如何处理这些记录?是通过 SSIS 之类的 ETL 吗?在这种情况下,我建议使用 C# Split 函数。

标签: sql-server string split


【解决方案1】:

SQL 2016 具有函数 STRING_SPLIT。结合 PIVOT,您可以执行以下操作:

;WITH CTE AS (
    SELECT value, ColumnName = 'c' + CAST(ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS VARCHAR)
    FROM STRING_SPLIT('"OpportunityName","Fact","","","StartDate","EndDate","IsActive","UpdateDate"',',')
)
SELECT * 
FROM CTE
pivot (MAX(value) FOR ColumnName IN("c1","c2","c3","c4","c5","c6","c7","c8")) AS p;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多