Top.Mail.Ru
Ответы

Как в SQL (в контексте Oracle) строку разделить на подстроки через разделитель?

Есть строка вида "текст1; текст2; текст3", длина не известна. Как получить столбец вида
"текст1"
"текст2"
"текст3"
?

И боле широкая задача когда не одна строка подается, а несколько в результате другого запроса или таблица, при этом нужно просто объединение результатов каждой строки.

Дополнен

Есть функция regexp_substr, но как-то не очень понятно и решает только 1 вопрос.

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Новичок
9лет

С Oracle не работаю, поэтому не знаю, что там есть, а в TSQL можно.

1) Делим на 2 строки, до и после разделителя:
SET @p=CHARINDEX(';',@MyText)
SET @str1=SUBSTRING(@MyText,1,@p-1)
SET @str2=LTRIM(SUBSTRING(@MyText,@p1+1,LEN(@MyText)-@p-1))
Можно делать в цикле, а можно написать функцию, которая вернет таблицу с кусками, а к ней обращаться, как обычно к таблицам.

2) Набирать в переменную:
SET @MyText=''
SELECT @MyText=@MyText+[TextField]+';' FROM [MyTable] WHERE ...
Можно также использовать в SELECT, такую конструкцию:
FOR XML PATH(''),type).value('.','nvarchar(max)')
Получается просто поток символов, но ИМХО это только для TSQL