用char(10)+ char(13)换行符分隔子字符串时出错

时间:2018-09-11 16:48:38

标签: sql sql-server sql-server-2008-r2 substring

我要执行的操作是通过换行符将我的数据分成几个单独的字段: 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 :(得分:0)

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