仅连接非空字符串的Postgresql
假设您在一个表中有一些数据,如下所示仅连接非空字符串的Postgresql,sql,postgresql,if-statement,Sql,Postgresql,If Statement,假设您在一个表中有一些数据,如下所示 line1 line2 line3 city zipcode 1 Any Road NULL NULL Big Apple 12345 The White House Pennsylvania Avenue NULL Washington 20500 10 Downing Street
line1 line2 line3 city zipcode
1 Any Road NULL NULL Big Apple 12345
The White House Pennsylvania Avenue NULL Washington 20500
10 Downing Street NULL NULL London SW1A 2AA
如何为非空字段返回值。以“白宫”为例,我想返回除第3行之外的所有字段的值(因为它有一个空值)
相对于
The White House, Pennsylvania Avenue, **,** Washington, 20500
我正在尝试将ACE/JET/MS Access查询转换为它的Postgresql等价物。在Access中,我使用类似于
Select
IIF(line1 <> '', ', ' + line1, '')
+ IIF(line2 <> '', ', ' + line2, '')
+ IIF(line3 <> '', ', ' + line3, '')
+ IIF(city <> '', ', ' + city, '')
+ IIF(zipcode <> '', ', ' + zipcode, '') as CustDetails
From addresses
如何嵌套Case语句以仅在结果中显示非空值?您正在查找:
您正在寻找:
使用concat\u ws()
(concat“带分隔符”),它将正确处理空值:
SELECT concat_ws(',', line1, line2, line3, line4, city, zipcode) as cust_details
FROM addresses;
如果任何元素为null,则不会添加分隔符
如果需要它忽略空字符串,请在以下情况下使用null:
SELECT concat_ws(',', line1, nullif(line2,''), nullif(line3,''), nullif(line4,''), city, zipcode) as cust_details
FROM addresses;
使用concat\u ws()
(concat“带分隔符”),它将正确处理空值:
SELECT concat_ws(',', line1, line2, line3, line4, city, zipcode) as cust_details
FROM addresses;
如果任何元素为null,则不会添加分隔符
如果需要它忽略空字符串,请在以下情况下使用null:
SELECT concat_ws(',', line1, nullif(line2,''), nullif(line3,''), nullif(line4,''), city, zipcode) as cust_details
FROM addresses;
谢谢戈登,我感谢你的时间和帮助。一匹没有名字的马用同样的答案把你赶上了岗位,所以我接受了这个答案,但是+1是你的。@Johnny。你可以接受任何你喜欢的答案。而且,一匹没有名字的马肯定有一个很好的答案。不过,作为记录,这个答案出现在12秒之前。你可以按日期(现在显示为“昨天”)握住鼠标,它会显示准确的时间。你可以按日期(现在显示为“昨天”)握住鼠标,它会显示准确的时间。我真的不知道你能做到这一点。对我来说,你的答案列在“一匹马”下面,因此我认为你被“击败了”。谢谢你花时间向我指出这一点,并礼貌地这么做。A旁白。我注意到,如果字段'line1'为空,则cancat_ws函数将失败。如果同时有两个空值,也就是说,line2和line3=null。@Johnny。我几年前从亚伦·伯特兰那里学会了这个把戏。在那种情况下,他抢先找到了答案;)谢谢戈登,我感谢你的时间和帮助。一匹没有名字的马用同样的答案把你赶上了岗位,所以我接受了这个答案,但是+1是你的。@Johnny。你可以接受任何你喜欢的答案。而且,一匹没有名字的马肯定有一个很好的答案。不过,作为记录,这个答案出现在12秒之前。你可以按日期(现在显示为“昨天”)握住鼠标,它会显示准确的时间。你可以按日期(现在显示为“昨天”)握住鼠标,它会显示准确的时间。我真的不知道你能做到这一点。对我来说,你的答案列在“一匹马”下面,因此我认为你被“击败了”。谢谢你花时间向我指出这一点,并礼貌地这么做。A旁白。我注意到,如果字段'line1'为空,则cancat_ws函数将失败。如果同时有两个空值,也就是说,line2和line3=null。@Johnny。我几年前从亚伦·伯特兰那里学会了这个把戏。在那种情况下,他抢先找到了答案;)它忽略空参数,但不忽略空字符串(PG12)。它忽略空参数,但不忽略空字符串(PG12)。
SELECT concat_ws(',', line1, line2, line3, line4, city, zipcode) as cust_details
FROM addresses;
SELECT concat_ws(',', line1, nullif(line2,''), nullif(line3,''), nullif(line4,''), city, zipcode) as cust_details
FROM addresses;