2015-08-31 2 views
0

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

мой таблица только один колонка.

   Value 
     This is the text for test. 

Теперь я хочу иметь вышеуказанное значение в максимальной длине 5 символов в одной строке, но несколько строк.

ID Value 
1 This  (this row has a white space in the end) 
2 is the 
3  text  (this row has a white space in the beginning) 
4 for t 
5 est.  (this row has only 4 character but not more than5) 
+3

Что вы попробовали? Покажите нам свою работу. – MPelletier

+0

Я пробовал оператор case, когда LEN (Value)> = 5 THEN .. но кажется, что возвращает только одну строку, мне нужно несколько строк. Я сожалею, что моя попытка настолько бедна, что я не хочу смущать себя :( – Programmer

+0

Я искал онлайн, и каждое решение в Интернете, похоже, говорит о разделении значений на какой-то разделитель, мой разделитель - это длина строки – Programmer

ответ

0

Один из способов заключается в использовании рекурсивного ОТВ:

with cte as (
     select left(col, 5) as char5, substring(col, 6, len(col)) as rest 
     from table t 
     union all 
     select left(rest, 5), substring(rest, 6, len(rest)) 
     from cte 
     where len(rest) > 0 
    ) 
select char5 
from cte; 

Обратите внимание, что существует максимальная глубина рекурсии в SQL Server. Вы можете переопределить значение по умолчанию, если строки действительно длинны.

+0

Спасибо за ваш ответ, мои фактические строки довольно длинны, и я буду разбивать их максимум на 4000 символов, я уменьшил проблему для лучшей ясности. – Programmer

+0

Я добавил ОПЦИЯ (MAXRECURSION 0), но запрос никогда не останавливается вы должны сообщить об этом? – Programmer

+1

После первого «из CTE» вам нужно добавить «где len (rest)> 0», чтобы остановить рекурсию. – Polux2

Смежные вопросы