【问题标题】:Remove Leading Commas via Coalasce and NULLIF?通过 Coalasce 和 NULLIF 删除前导逗号?
【发布时间】:2013-03-11 15:12:36
【问题描述】:
UPDATE PropertyInformationDump
   SET RegistryAdd = COALESCE(NULLIF(b.OCAREOF, ''), b.OCAREOF + ', ','') +
       COALESCE(NULLIF(b.O1STADD, ''), b.O1STADD + ', ','') + 
       COALESCE(NULLIF(b.O2NDADD, '') + b.O2NDADD + ', ','') + 
       COALESCE(b.OSTNAME + ', ','') + COALESCE(b.OCITYST + '  ','') +  
       COALESCE(NULLIF(b.OZIP, ''), b.OZIP,'')
  FROM dbo.vw_BRT b
 WHERE BRTNumber = b.PARCEL
GO

希望删除这些组合字符串前面的逗号。这是正在发生的事情的一个示例:

, , 1350 SUSQUEHANNA AVE, PHILADELPHIA PA  19125
MICHAEL J CARLONE, 10050 ROOSEVELT BLVD, PHILADELPHIA PA  191163924

需要它始终看起来像:

1350 SUSQUEHANNA AVE, PHILADELPHIA PA  19125

或者只是 OCAREOF 的填充方式:

MICHAEL J CARLONE, 10050 ROOSEVELT BLVD, PHILADELPHIA PA  191163924

如果字段为空或为空,我需要去掉这些逗号。显然我做错了!

【问题讨论】:

  • 您使用的是什么 DBMS?我认为您的语法中不需要 COALESCE,NULLIF 和添加逗号应该可以解决所有问题

标签: sql-server tsql sql-server-2005 sql-update


【解决方案1】:

使用 SQL Server 2005 应该可以工作

UPDATE PropertyInformationDump
SET RegistryAdd = 
    CASE WHEN Len(b.OCAREOF) > 0 THEN b.OCAREOF + ',' ELSE '' END + 
    CASE WHEN Len(b.O1STADD) > 0 THEN b.O1STADD + ',' ELSE '' END  + 
    CASE WHEN Len(b.O2NDADD) > 0 THEN b.O2NDADD + ',' ELSE '' END  + 
    CASE WHEN Len(b.OSTNAME ) > 0 THEN b.OSTNAME + ',' ELSE '' END  + 
    CASE WHEN Len(b.OCITYST) > 0 THEN b.OCITYST+ ',' ELSE '' END  + 
    CASE WHEN Len(b.OZIP) > 0 THEN b.OZIP+ ',' ELSE '' END 
FROM dbo.vw_BRT b
WHERE BRTNumber = b.PARCEL

如果字段为空且没有数据,则可以使用 isNull() 忽略

【讨论】:

  • 对,但有时该字段为空,因此 IsNull 仍会导致相同的问题。我得到 ,,,1350 SUSQUEHANNA AVE,PHILADELPHIA PA,19125,使用该代码。
  • @korrowan 我已更新为仅在字段不为空时添加逗号。
  • 好吧,很酷,这行得通。做了一些调整以获得我需要的确切字符串,但效果很好。谢谢!
【解决方案2】:

使用这个:

COALESCE(NULLIF(b.OCAREOF + ', ', ''),'')

更新

如果您的字段不可为空,请使用:

CASE WHEN LEN(b.OCAREOF) = 0 THEN '' ELSE b.OCAREOF + ', ' END +
....

【讨论】:

  • 如果我使用它,我会得到: , , , 1350 SUSQUEHANNA AVE, PHILADELPHIA PA 19125
  • @korrowan 您的字段是空的 ('') 还是 NULL?
  • 我确信这就是我使用它时得到的。我会尽快上传一些数据。
猜你喜欢
  • 1970-01-01
  • 2011-04-24
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-22
  • 1970-01-01
  • 2020-05-10
相关资源
最近更新 更多