Как мне выбрать текст между каждым вхождением ‘-‘ из элементов в таблице

#sql-server

#sql-server

Вопрос:

Мне нужно вытащить строку между каждым - номером каждого элемента в таблице.

Пример номеров элементов:

 T-111459-DK-CAS-DGE-2X8-RT-M
T-1114659-MON-SKL-WT-3X9-GLS
T-111469-DK-PNN-GLZ-3X9-LE-GLS
T-111469-ARL-RIP-M-2X8-DUCR
T-111469-ARS-MAD-L-1X8-NL
  

Вот что я хотел бы видеть, используя первый номер элемента в качестве примера:

  • между ‘-‘ # 1 и ‘-‘ # 2 (111459) в качестве поставщика
  • между ‘-‘ # 2 и ‘-‘ # 3 (DK) в виде строки
  • между ‘-‘ # 3 и ‘-‘ # 4 (CAS) в качестве цвета

Ответ №1:

Я попытался жестко запрограммировать его следующим образом:

 declare @str varchar(100) = 'T-1114659-MON-SKL-WT-3X9-GLS' --testing purpose

select substring(substring(@str,3, len(@str)-2),1,charindex('-',substring(@str,3, len(@str)-2),1)-1) as Vendor
,substring(replace(@str,concat('T-',substring(substring(@str,3, len(@str)-2),1,charindex('-',substring(@str,3, len(@str)-2),1)-1),'-'),''),1,charindex('-',replace(@str,concat('T-',substring(substring(@str,3, len(@str)-2),1,charindex('-',substring(@str,3, len(@str)-2),1)-1),'-'),''))-1) as Line
, substring(reverse(substring(reverse(@str),1,len(@str)- len(substring(substring(@str,3, len(@str)-2),1,charindex('-',substring(@str,3, len(@str)-2),1)-1)) - len(substring(replace(@str,concat('T-',substring(substring(@str,3, len(@str)-2),1,charindex('-',substring(@str,3, len(@str)-2),1)-1),'-'),''),1,charindex('-',replace(@str,concat('T-',substring(substring(@str,3, len(@str)-2),1,charindex('-',substring(@str,3, len(@str)-2),1)-1),'-'),''))-1))-4)),1,CHARINDEX('-',reverse(substring(reverse(@str),1,len(@str)- len(substring(substring(@str,3, len(@str)-2),1,charindex('-',substring(@str,3, len(@str)-2),1)-1)) - len(substring(replace(@str,concat('T-',substring(substring(@str,3, len(@str)-2),1,charindex('-',substring(@str,3, len(@str)-2),1)-1),'-'),''),1,charindex('-',replace(@str,concat('T-',substring(substring(@str,3, len(@str)-2),1,charindex('-',substring(@str,3, len(@str)-2),1)-1),'-'),''))-1))-4)))-1) as Color
  

Замените @str соответствующим именем вашего столбца.
Удачи!

Комментарии:

1. @TomT Не могли бы вы принять ответ, если он вам поможет?