在SQL中连接和格式化文本

时间:2014-04-14 17:15:39

标签: sql sql-server

我需要将CityStateCountry列连接成City,State,Country。

这是我的代码:

Select City + ', ' + State + ', ' + Country as outputText from Places

但是,因为CityState允许null(或空)值,所以会发生什么,(例如)如果City为空/空,我的输出看起来像, Iowa, USA;或者说State为空,然后输出看起来像Seattle, , USA

无论如何我可以格式化输出并删除“不必要的”逗号吗?

编辑:由于要求,我不应该使用任何其他的意思(如PL / SQL,存储过程)等,所以它必须是普通的SQL语句

5 个答案:

答案 0 :(得分:3)

select
  isnull(City, '') +
  case when isnull(City, '') != '' then ', ' else '' end +
  isnull(State, '') + 
  case when isnull(State, '') != '' then ', ' else '' end +
  isnull(Country, '') as outputText 
from 
  Places

答案 1 :(得分:1)

由于添加一个带有null的字符串将导致null,因此如果它们为null(不是空字符串),这将为您提供所需的结果

Select isnull(City + ', ','')  + isnull(State + ', ' ,'') + isnull(Country,'') as outputText from Places

答案 2 :(得分:0)

使用COALESCE (Transact-SQL)功能。

SELECT COALESCE(City + ', ', '') + COALESCE(State + ', ', '')...

答案 3 :(得分:0)

无论如何都不优雅......

  • 首先将城市,州,国家/地区更改为空值(如果为空)
  • 然后将该值解释为null并在逗号
  • 之前添加空格
  • 然后用空集替换任何空格逗号空格(,)。

查询:

SELECT replace(coalesce(Replace(City,'',Null),' ') + ', ' + 
               coalesce(Replace(State,'',Null), ' ' + ', ' + 
               coalesce(replace(Country,''Null),''), ' , ','') as outputText 
FROM Places

假设没有城市州或国家/地区包含空格逗号空间。

答案 4 :(得分:0)

在SQL Server 2012中,您可以使用CONCAT功能:

select concat(City,', ',State,', ',Country ) as outputText from Places