通过分隔冒号将单列分为两列

时间:2019-06-19 19:41:28

标签: sql-server

我想要通过将其中有一个冒号的一列分成两个独立的列来输出结果。一个条件是如果没有冒号,则该值应该在第二个新列中

SingleColumn
------------ 
TYPE: HIGH POWER/MAGNETIC
LAMPTYPE: FLUORESCENT
BALLAST STYLE

NewColumn1    NewColumn2
----------    ----------
Type          HIGH POWER/MAGNETIC
LAMPTYPE      FLUORESCENT
              BALLAST STYLE

2 个答案:

答案 0 :(得分:1)

也许使用子字符串函数来提取想要的部分:

select
    iif(
        charindex(':', SingleColumn) > 0,
        left(SingleColumn, charindex(':', SingleColumn) - 1),
        null
    ) as NewColumn1,

    iif(
        charindex(':', SingleColumn) > 0,
        right(SingleColumn, len(SingleColumn) - charindex(':', SingleColumn)),
        SingleColumn
    ) as NewColumn2
 from my_table

如果字符串不包含定界符,则第二列将获取整个值。

答案 1 :(得分:0)

如果您使用的是SQL Server 2016,则可以使用新的string_split函数:

SELECT colid,prod1,prod2 
FROM my_table  
CROSS APPLY STRING_SPLIT(singlecolumn, ':');   

其中colid是常规列,prod1和prod2将包含两个部分。如果有一个(否:),则prod1将包含该值。