Ошибка с разделением данных на подстроки с помощью символов char (10) + char (13) - PullRequest
0 голосов
/ 11 сентября 2018

То, что я пытаюсь сделать, это разделить мои данные по разрывам строк на отдельные поля: Attn, Addr1Field, Addr2Field . Я нашел расположение обоих разрывов строк, но разница не одинакова для каждой строки данных, поэтому я использую выражение в качестве третьего параметра в моей функции Substring(). Я получаю ошибку Invalid length parameter passed to the LEFT or SUBSTRING function. На прилагаемом изображении я жестко запрограммировал 34-20, чтобы получить желаемые результаты, но каждая строка может отличаться, поэтому мне нужно иметь возможность использовать выражение.

Select   
case  
when LEFT(CONVERT(VARCHAR(MAX), soship.fmstreet),5)='ATTN:'   
Then SUBSTRING(CONVERT(VARCHAR(MAX), soship.fmstreet), 7,CHARINDEX(CHAR(13)+CHAR(10),CONVERT(VARCHAR(MAX), soship.fmstreet))-1)   
Else ' '   
End as AttnField,    

case   
when LEFT(CONVERT(VARCHAR(MAX), soship.fmstreet),5)='ATTN:'   
Then SUBSTRING(CONVERT(VARCHAR(MAX), soship.fmstreet),CHARINDEX(CHAR(13)+CHAR(10),CONVERT(VARCHAR(MAX), soship.fmstreet))+2,CHARINDEX(CHAR(13)+CHAR(10),CONVERT(VARCHAR(MAX), soship.fmstreet),CHARINDEX(CHAR(13)+CHAR(10),CONVERT(VARCHAR(MAX), soship.fmstreet))+1) - 
CHARINDEX(CHAR(13)+CHAR(10),CONVERT(VARCHAR(MAX), soship.fmstreet))) 

Else ''     
End as Addr1Field

1 Ответ

0 голосов
/ 12 сентября 2018

Мой charindex возвращал 0, поэтому я написал предложение Where для его решения.

Where
(CHARINDEX(CHAR(13)+CHAR(10),CONVERT(VARCHAR(MAX), soship.fmstreet),CHARINDEX(CHAR(13)+CHAR(10),CONVERT(VARCHAR(MAX), soship.fmstreet))+1) - 
CHARINDEX(CHAR(13)+CHAR(10),CONVERT(VARCHAR(MAX), soship.fmstreet)) > 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...