#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 Не могли бы вы принять ответ, если он вам поможет?