Как разделить строку в sql на разные столбцы
Подскажите, пожалуйста, как в sql можно распарсить строку по конкретному разделителю и записать полученные части в разные столбцы.
У меня есть строка: '16001=4,16002=4,16003=4,16005=1,16007=3'.
Нужно реализовать что-то в роде таблицы (номер, значение: 16001, 4).
Я понял что через STRING_SPLIT можно разделить на строки по символу ,.
В итоге полученный результат можно прогнать через цикл, где строку 16001=4 разделить на 16001 и 4. В этом у меня проблема. Подскажите, пожалуйста, как можно это реализовать.
Использую SQL Server Management Studio 18.7.
Сейчас я имею функцию, на которую подаю строку и получаю табличное значение:
CREATE FUNCTION [dbo].[ConvertStringToTable](@inputString NVARCHAR(400))
RETURNS @tabl TABLE(value NVARCHAR(100)) AS
BEGIN
INSERT @tabl
SELECT value
FROM STRING_SPLIT(@inputString, ',')
WHERE RTRIM(value) <> ''
RETURN
END
Ответы (2 шт):
select left(value,charindex('=',value)-1),
SUBSTRING(value,charindex('=',value)+1,len(@inputString))
from string_split(@inputString,',')
Версия SSMS не имеет значения.
Чтобы получить версию SQL Server, введите следующую команду:
SELECT @@VERSION;
Вот несколько более эффективный метод, потому что он вычисляет позицию знака равенства только один раз для пары ключ/значение.
DECLARE @inputString VARCHAR(MAX) = '16001=4,16002=4,16003=4,16005=1,1600770=3';
SELECT LEFT(value, t.pos - 1) AS [key],
RIGHT(value, LEN(value) - t.pos) AS [value]
FROM STRING_SPLIT(@inputString, ',')
CROSS APPLY (SELECT pos = CHARINDEX('=',value)) AS t;
Результат
+---------+-------+
| key | value |
+---------+-------+
| 16001 | 4 |
| 16002 | 4 |
| 16003 | 4 |
| 16005 | 1 |
| 1600770 | 3 |
+---------+-------+