SSMS - SQL - 运输中的 CHARINDEX Return

SSMS - SQL - CHARINDEX at Carriage Return

在 SQL 中,我试图接收一个长度不一的地址,并将其在一个马车 return 中分成两个单独的字段。我成功地分离了地址,但每隔一段时间(300 次中有 17 次)地址的右侧就会出现错误。

Adr1: RM320 VOTECH(Char(10))abc BUFORD AVE,

Adr2: FIELD ATTHLETIC BLDG(Char(10))abc 15TH AVE SE,

马车return前后都没有space。

select replace(RIGHT( REPLACE( 'RM320 VOTECH
abc BUFORD AVE,' , LEFT( 'RM320 VOTECH
abc BUFORD AVE,' , 
CHARINDEX( CHAR( 10 ) , 'RM320 VOTECH
abc BUFORD AVE,' )) , '' ) , CHARINDEX( CHAR( 10 ) , 'RM320 VOTECH
abc BUFORD AVE,' )),',','')

这个 returns: "bc BUFORD AVE" 应该 return "abc buford ave"

select replace(RIGHT( REPLACE( 'FIELD ATHLETIC BLDG
abc 15TH AVE SE,' , LEFT( 'FIELD ATHLETIC BLDG
abc 15TH AVE SE,' , 
CHARINDEX( CHAR( 10 ) , 'FIELD ATHLETIC BLDG
abc 15TH AVE SE,' )) , '' ) , CHARINDEX( CHAR( 10 ) , 'FIELD ATHLETIC BLDG
abc 15TH AVE SE,' )),',','')

这 returns: "abc 15TH AVE SE" 正确。

两个相同的选择如何return不同的结果?

我认为您不需要 replace( RIGHT( 部分。

如果您使用:

select REPLACE( 'RM320 VOTECH@abc BUFORD AVE,' ,
      LEFT( 'RM320 VOTECH@abc BUFORD AVE,' , 
        CHARINDEX( '@' , 'RM320 VOTECH@abc BUFORD AVE,' )
       ) , '' );

result: 

abc BUFORD AVE,

注意:为了便于阅读,我已将 CHAR(10) 替换为 @。