T-SQL:在上一次Dash出现之前获取所有文本

时间:2018-08-29 05:19:12

标签: text return

我一直试图获取直到(但不包括)最后一个破折号的所有文本。

我可以找到一种方法来获取第一个破折号左侧的文本(例如SUBSTRING(@ID,1,CHARINDEX('-',@ID)-1)),甚至说第二个破折号,但问题是我列表中的破折号数量大相径庭。

  • 例如
  • ID
  • ABC-DEF-GHI-001
  • ABC-DEF-2
  • ABC-DEF-GHI-JKL-00003
  • ABC-DEF-GH-4
  • ABC-123-DEF-008

从上面我想获取最后一个破折号左侧的所有文本。

  • ABC-DEF-GHI
  • ABC-DEF
  • ABC-DEF-GHI-JKL
  • ABC-DEF-GH
  • ABC-123-DEF

任何指针表示赞赏。

1 个答案:

答案 0 :(得分:0)

一个技巧,我们可以在这里找到反向字符串中破折号的 first 出现。然后,使用该索引来偏移整个字符串的子字符串,但要从原始开头开始。

SELECT
    col,
    LEFT(col, LEN(col) - CHARINDEX('-', REVERSE(col))) AS col_sub
FROM yourTable
WHERE
    col LIKE '%-%';

enter image description here

Demo