如何删除在CONCAT函数中行是否返回NULL时定义的值?

时间:2019-04-30 20:53:18

标签: sql postgresql

我正在寻找删除我定义的值,如果行在CONCAT函数中返回NULL。

我不确定如何去做。


CONCAT('Floor:', ' ', l1.floor, ' ', 'Unit:', ' ', l1.unit_number, ' ', 'Buzzer:', ' ', l1.buzzer) as R_ADDRESS2,

如果行为NULL,我希望每个值实例为空。 因此,如果l1.floor返回NULL,则'Floor:', ' '也不会在R_ADDRESS2的列中显示。 与l1.unit_numberl1.buzzer相同。

我该怎么做?

编辑: 当前显示如下:

r_address2

Floor: 10 Unit: Buzzer:
Floor: 2 Unit: 200 Buzzer:
Floor: Unit: Buzzer:

2 个答案:

答案 0 :(得分:3)

使用CONCAT_WS()

CONCAT_WS(' ',
          ('Floor: ' || l1.floor),
          ('Unit: ' || l1.unit_number),
          ('Buzzer: ' || l1.buzzer)
         ) as R_ADDRESS2,
如果任何自变量为||

NULL将返回NULL。但是,CONCAT_WS()会忽略NULL个参数,因此组合可以满足您的要求。

Here是db <>小提琴。

答案 1 :(得分:1)

concat函数将忽略null,而“常规”串联则不会。都使用它们。

CONCAT('Floor: ' + l1.floor + ' ', -- or cast(l1.floor as varchar) if it is int
    'Unit: ' + l1.unit_number + ' ', 
    'Buzzer: ' + l1.buzzer) as R_ADDRESS2,