如果行在CONCAT函数中返回NULL,如何删除我定义的值?

问题描述 投票:0回答:2

我想删除一个我定义的值,如果一行在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:
sql postgresql
2个回答
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
投票

concat函数忽略nulls,“通常”连接不。同时使用它们。

CONCAT('Floor: ' + l1.floor + ' ', -- or cast(l1.floor as varchar) if it is int
    'Unit: ' + l1.unit_number + ' ', 
    'Buzzer: ' + l1.buzzer) as R_ADDRESS2,
© www.soinside.com 2019 - 2024. All rights reserved.