【问题标题】:SSMS - SQL - CHARINDEX at Carriage ReturnSSMS - SQL - 回车时的 CHARINDEX
【发布时间】:2015-03-26 19:36:25
【问题描述】:

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

当它应该返回“abc buford ave”时返回:“bc 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”。

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

【问题讨论】:

  • 它可能比你需要的多,但this web page 有很多关于拆分字符串的细节。

标签: sql replace charindex


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    • 1970-01-01
    • 2018-05-29
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多