拆分并从T-SQL获取结果

时间:2019-03-09 00:41:29

标签: sql sql-server tsql parsing split

我有一些T-SQL代码可从SQL Server表中提取信息。我需要解析一列并根据以下结果集显示。我很喜欢SQL,如果您不标记为重复并告诉我如何做,那将是很棒的。

可以帮忙吗?

SELECT Account, CTSFirm, AccountName, BOCodeGMI 
FROM StagingEDFACRRBO

BOCodeGMI列包含:

e=01:c=KW:m=10000
c=C-:e=01:m=10000
c=S-:e=01:m=10000
c=06:e=01:m=10
c=07:e=01:m=100
c=W-:e=01:M=10000

拆分BOCodeGMI并显示两个单独的列BOCodeGMI_1BOCodeGMI_2的逻辑:

  • 如果字符串包含e=,则显示BOCodeGMI_1作为其对应值(例如:01);如果字符串不包含e=,则显示{ {1}}为NULL

  • 如果字符串包含BOCodeGMI_1,则显示c=作为其对应值(例如:BOCodeGMI_2);如果字符串不包含C-,则显示{{ 1}}为NULL

最后这就是它的显示方式-

c=

1 个答案:

答案 0 :(得分:1)

使用CASECHARINDEXSUBSTRING

尝试下一个查询
SELECT 
    BOCodeGMI,
    CASE
        WHEN CHARINDEX('e=', BOCodeGMI) > 0 
            THEN SUBSTRING (BOCodeGMI, CHARINDEX('e=', BOCodeGMI) + 2 , 2) 
    END as BOCodeGMI_1,
    CASE
        WHEN CHARINDEX('c=', BOCodeGMI) > 0 
           THEN SUBSTRING (BOCodeGMI, CHARINDEX('c=', BOCodeGMI) + 2, 2)
    END as BOCodeGMI_2
FROM
    tableName

CASE检查条件并返回值。

CHARINDEX在字符串中搜索子字符串,然后返回位置。

SUBSTRING从字符串中提取一些字符。