Ситуация: У меня есть столбец, в котором каждая ячейка может иметь до 5 разделителей . Однако, возможно, что нет ни одного.
Цель: Как мне обрабатывать такие ошибки, как:
Недопустимый параметр длины, переданный в функцию LEFT или SUBSTRING.
в случае, если не удается найти указанный разделитель.
Запрос:
declare @text VARCHAR(111) = 'abc-def-geeee-ifjf-zzz'
declare @start1 as int
declare @start2 as int
declare @start3 as int
declare @start4 as int
declare @start_index_reverse as int
set @start1 = CHARINDEX('-',@text,1)
set @start2 = CHARINDEX('-',@text,charindex('-',@text,1)+1)
set @start3 = CHARINDEX('-',@text,charindex('-',@text,CHARINDEX('-',@text,1)+1)+1)
set @start4 = CHARINDEX('-',@text,charindex('-',@text,CHARINDEX('-',@text,CHARINDEX('-',@text,1)+1)+1)+1)
set @start_index_reverse = CHARINDEX('-',REVERSE(@text),1)
select
LEFT(@text,@start1-1) AS Frst,
SUBSTRING(@text,@start1+1,@start2-@start1-1) AS Scnd,
SUBSTRING(@text,@start2+1,@start3-@start2-1) AS Third,
SUBSTRING(@text,@start3+1,@start4-@start3-1)AS Third,
RIGHT(@text,@start_index_reverse-1) AS Lst
В этом случае моя переменная включает 5 разделителей, и поэтому мой запрос работает, но если я удалю один '-', он сломается.