【问题标题】:T-SQL : Fetch all Text before last occurence of DashT-SQL:在最后一次出现 Dash 之前获取所有文本
【发布时间】:2018-08-29 05:19:11
【问题描述】:

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

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

  • 例如。
  • 身份证
  • 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

任何指针表示赞赏。

【问题讨论】:

    标签: text return


    【解决方案1】:

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

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

    Demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-23
      • 1970-01-01
      • 2017-01-25
      • 1970-01-01
      • 2014-07-31
      • 1970-01-01
      • 1970-01-01
      • 2019-11-15
      相关资源
      最近更新 更多