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

问题描述 投票:0回答:1

我试图做的是通过换行符将我的数据分成单独的字段: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
sql sql-server sql-server-2008-r2 substring
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.