kp564 Ответов: 2

Как разделить строку в SQL


струна подобна (1:2~2:1,4,5~3:это испытание)
и я хочу разбить его сначала на '~' , а затем на выходную строку с ':' в sql

выход как
1 2
2 1,4,5
3 это тест

я хочу это в SQL запросе можно ли это сделать без использования функции или cte


заранее спасибо.

Что я уже пробовал:

я пробовал случай, когда.
а также попробовал ПОДСТРОЧНУЮ функцию sql.

PIEBALDconsult

Избегайте манипуляций со строками в SQL. Если вы можете, напишите для этого функцию CLR.

2 Ответов

Рейтинг:
1

Graeme_Grant

В Google Search есть много ответов для вас: Как разделить строку в SQL[^]


Рейтинг:
0

Kornfeld Eliyahu Peter

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

DECLARE @VAL AS NVARCHAR(MAX) = '1:2~2:1,4,5~3:THIS IS A TEST' + '~' -- you must ensure the string ends with the row delimiter
DECLARE @ROWDEL AS NCHAR(1) = '~' -- row delimiter
DECLARE @COLDEL AS NCHAR(1) = ':' -- column delimiter
DECLARE @RET TABLE
(
	POS INT,
	VAL NVARCHAR(MAX)
)

WHILE (CHARINDEX(@ROWDEL, @VAL) > 0)
BEGIN
	INSERT INTO @RET(VAL)
	SELECT SUBSTRING(@VAL, 1, CHARINDEX(@ROWDEL, @VAL) - 1)

	SET @VAL = SUBSTRING(@VAL, CHARINDEX(@ROWDEL, @VAL) + 1, LEN(@VAL))
END

UPDATE @RET SET 
	POS = SUBSTRING(VAL, 1, CHARINDEX(@COLDEL, VAL) - 1),
	VAL = SUBSTRING(VAL, CHARINDEX(@COLDEL, VAL) + 1, LEN(VAL))
FROM @RET

SELECT * FROM @RET