T-SQL: извлекать весь текст до последнего появления Dash - PullRequest
0 голосов
/ 29 августа 2018

Я застрял при попытке извлечь весь текст до (но не включая) последнего тире.

Я могу найти решение для извлечения текста слева от 1 тире (например, 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 голосов
/ 29 августа 2018

Один трюк, который мы можем использовать здесь, чтобы найти первое вхождение тире в обратной строке. Затем используйте этот индекс для смещения подстроки всей строки, но взятой из исходного начала.

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

enter image description here

Демо

...