通过 char(10)+char(13) 换行符分隔数据的子字符串出错

Error with substring seperating data by char(10)+char(13) line breaks

我试图做的是通过换行符将我的数据分隔成单独的字段:A​​ttn、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

我的 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)