SQL Server, строка должна быть подстрокой в нескольких строках

#sql #sql-server #rdbms

Вопрос:

В SQL Server моя структура таблиц выглядит следующим образом:

ОрдерИД Идентификатор клиента Серийно
58258 877 OW13355-OW13356-OW13357-OW13358
58364 6 OW13269-OW13270-OW13271-OW13272
58816 20315 OW13940-OW13941-OW13942
59063 93085 OW13676-OW13677-OW13678-OW13679
59114 16713 OW12504-OW12505-OW12506
59519 470 OW14361-OW14362-OW14363
59769 34820 OW13928-OW13929-OW13930
60318 22424 OW14081-OW14082-OW14083-OW14084-OW14085-OW14086
60318 22424 OW14087-OW14088-OW14089
30858 16962 EF 22567 9
8097 6 OW76879

В serialNo столбце иногда в строке вводится несколько серийных номеров. Я хочу извлечь все серийные номера, которые объединены по знаку, и создать новую строку. Каждая строка должна иметь только 1 серийный номер. Например, я хочу показать 4 записи для orderid = 58258 выбора.

Можно ли это сделать?

Результат должен быть

ОрдерИД Идентификатор клиента Серийно
58258 877 OW13355
58258 877 OW13356
58258 877 OW13357
58258 877 OW13358

Данная структура таблицы должна содержать 35 записей для 11 записей. Не могли бы вы, пожалуйста, помочь мне с запросом?

Я использую CHARINDEX для поиска '-' символа, но как найти несколько вхождений '-' , а затем выбрать в качестве нескольких строк?

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

1. Не помечайте спам тегами. Отметьте СУБД, которую вы используете, и только эту СУБД.

2. Для SQL server используйте STRING_SPLIT docs.microsoft.com/en-us/sql/t-sql/functions/…

Ответ №1:

 SELECT OrderID, CustomerID, value  
FROM Table1
    CROSS APPLY STRING_SPLIT(SerialNo, '-'); 
 

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

1. Спасибо за быстрый ответ

Ответ №2:

Используйте встроенную string_split функцию!

    select orderid, customerid, v.value SerialNo
    from Table t
    cross apply String_Split(t.SerialNo,'-') v
 

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

1. Спасибо за быстрый ответ