SSMS - SQL - CHARINDEX at Carriage Return

时间:2015-03-26 19:36:26

标签: sql replace charindex

在SQL中,我试图接收一个不同长度的地址,并将它在回车分隔成两个单独的字段。我已经成功地分开了地址,但每隔一段时间(300次中有17次)地址的右侧就会出错。

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

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

回车之前或之后没有空间。

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,' )),',','')

这将返回:“bc BUFORD AVE”,它应该返回“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,' )),',','')

这将正确返回:“abc 15TH AVE SE”。

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

1 个答案:

答案 0 :(得分:0)

我认为您不需要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)替换为@。