【问题标题】:T-SQL get substringT-SQL 获取子字符串
【发布时间】:2021-02-19 11:25:44
【问题描述】:

我希望从名为 KEY_Ref 的列中获取订单号,此 ref 列有各种内容,但有些行看起来像这样

LINE_NO=15^ORDER_NO=176572^RELEASE_NO=1^

现在我有兴趣获取 ORDER_NO 的值(在本例中为 176572)

我将如何(在 SQL Server 中)从主字符串中获取这个(或其他)值

逻辑总是 key1=value1^key2=value2^key3=value3^

【问题讨论】:

  • 对不起,这些值应该在不同的列中。
  • 我不能再同意了,唉,这就是我的现实:(

标签: sql sql-server regex tsql


【解决方案1】:

你可以使用string_split():

select t.*, s.orderno
from t outer apply
     (select stuff(s.value, 1, 9, '') as orderno
      from string_split(t.key_ref, '^') s
      where s.value like 'ORDER_NO=%'
     ) s;

Here 是一个 dbfiddle。

【讨论】:

    【解决方案2】:

    这将是一个有点冗长的答案,但是如果您的 SQL 服务器版本不支持 string_split 函数,您可以使用它。

    declare @str varchar(100) = 'LINE_NO=15^ORDER_NO=176572^RELEASE_NO=1^'
    
    declare @substr1 varchar(50) = substring(@str,charindex('^',@str)+1,len(@str))
    
    
    declare @substr2 varchar(50) = substring(@substr1,charindex('=',@substr1)+1,charindex('^',@substr1)-charindex('=',@substr1)-1)
    
    select @substr2 as 'order number'
    

    最终变量将产生所需的值,您必须将上述查询合并为单个查询,该查询可以在单个 select 语句中从表中获取值。

    这只有在模式不偏离您提到的模式时才有效。

    【讨论】:

      猜你喜欢
      • 2013-11-19
      • 1970-01-01
      • 1970-01-01
      • 2014-05-25
      • 1970-01-01
      • 2011-04-14
      • 2021-09-19
      • 1970-01-01
      • 2013-07-15
      相关资源
      最近更新 更多