【问题标题】:SELECT part of string [duplicate]选择字符串的一部分[重复]
【发布时间】:2017-02-21 10:34:31
【问题描述】:

我有一个类似$TAOVV*NK_LFE_11029_41586 的字符串,我只想选择 11029,即 _ 之间的数字。我尝试使用

substring([OrderCode],PatIndex('%_[0-9]_%', [OrderCode]),LEN([OrderCode]))

但不只提取那个数字。我如何定义变化的长度,并且它并不总是像本例中那样为 5 个字符?

【问题讨论】:

  • 请只标记相关的DBMS
  • 总是在最后一个_之前?
  • 在最后 2 之间 _
  • 我不想要最后一个数字,而是前面的数字。它在两个_之间

标签: sql sql-server


【解决方案1】:

你需要做两次子串.. 试试这个

declare @code nvarchar(100)='$TAOVV*NK_LFE_11029_41586'
select substring(substring(@code,PatIndex('%_[0-9]_%', @code)+1,LEN(@code)),1,charindex('_',substring(@code,PatIndex('%_[0-9]_%', @code)+1,LEN(@code)))-1)

【讨论】:

  • 成功了!!非常感谢!!
  • 它不适用于此文本:'$TAOVV*NK_LFE_11029_41586_41111_7474',它也在恢复 11029 !!
  • 这将选择字符串中"_[0-9]_"的第一个模式,而不是倒数第二个。我不知道这是否是 OP 的问题。
猜你喜欢
  • 2021-05-27
  • 1970-01-01
  • 2014-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多