Я использую следующее в операторе выбора, чтобы разбить строку на; ограничитель
Ошибки запроса, если в поле фактически нет данных или нет разделителя, как я могу сделать здесь контроль ошибок
select ParsedData.*
from Table1
cross apply ( select str = field + ';;' ) f1
cross apply ( select p1 = charindex( ';', str ) ) ap1
cross apply ( select p2 = charindex( ';', str, p1 + 1 ) ) ap2
cross apply ( select p3 = CHARINDEX(';', str, p2 + 1 )) ap3
cross apply ( select p4 = CHARINDEX(';', str, p3 + 1 )) ap4
cross apply ( select p5 = CHARINDEX(';', str, p4 + 1 )) ap5
cross apply ( select p6 = CHARINDEX(';', str, p5 + 1 )) ap6
cross apply ( select A = substring( str, 1, p1-1 )
,B = substring( str, p1+1, p2-p1-1 )
,C = SUBSTRING( str, p2+1 , p3-p2-1)
,D = SUBSTRING( str, p3+1 , p4-p3-1)
,E = SUBSTRING( str, p4+1 , p5-p4-1)
,F = SUBSTRING( str, p5+1 , p6-p5-1)
) ParsedData
Ошибка возвращена - неверный параметр длины передан в функцию LEFT или SUBSTRING.
Input
Полная строка
яблоко; манго; вишня; варенье; торт
выход
A B C D E
Яблочно-манго с вишневым вареньем
Спасибо