【问题标题】:Sql Server Extract StringSql Server 提取字符串
【发布时间】:2016-11-24 05:15:09
【问题描述】:

我有以下表格

DECLARE @TABLE TABLE (COL NVARCHAR(MAX))
insert @TABLE values
('[E=110][D=1]'),
('[E=110][D=NE]'),
('[E=110][D=U$]'),
('[E=110][D=FX]')

我正在尝试按以下方式提取数据

COL           || EXCEPTION_CODE    ||  DATA
=========================================
[E=110][D=1]  ||     110           || 1
[E=110][D=NE] ||     110           || NE
[E=110][D=U$] ||     110           || U$
[E=110][D=FX] ||     110           || FX

【问题讨论】:

    标签: sql-server replace substring charindex


    【解决方案1】:

    XML 比charindex 更灵活。 replace 对于准备格式良好的 xml 非常有用。见代码。

    ;with dat(col, x) as (
    select col, cast('<col'+replace(
                             replace(
                               replace(col,'=','="'),
                             ']','" '),
                            '[',' ')+' />' as xml)
    from @TABLE
    )
    select col, t.v.value('@E','int') Exception_code, t.v.value('@D','varchar(100)') [DATA]
    from dat cross apply x.nodes('col') t(v)
    

    结果与 OP 中的结果一致。

    【讨论】:

      【解决方案2】:

      查看函数 SUBSTRING 和 CHARINDEX。 将它们一起使用,您应该能够提取它。

      SUBSTRING(表达式,开始,长度)

      CHARINDEX (expressionToFind ,expressionToSearch [ , start_location ] )

      例如:

          SELECT SUBSTRING(COL,CHARINDEX('E=',COL)+2,CHARINDEX(']',COL) - CHARINDEX('E=',COL) - 2)
      FROM @TABLE
      

      将为您提供 EXCEPTION_CODE 列。

      【讨论】:

        猜你喜欢
        • 2019-08-06
        • 2017-12-10
        • 2021-11-22
        • 2021-12-08
        • 2023-03-14
        • 1970-01-01
        • 1970-01-01
        • 2014-12-24
        • 2020-10-15
        相关资源
        最近更新 更多