2013-03-05 46 views
2

我必須從數據庫中提取客戶列表,但如果第二個地址字段爲空,我想顯示文本None Provided。這是我的查詢:如何在sql查詢的空字段中顯示文本?

select concat(first_name, " ", last_name) as CustomerName, address, 
    address2, postal_code 
    from customer 
    inner join address 
    using (address_id); 

如果address2是空白,我想顯示「none provided」。我怎麼做?我相信答案非常簡單,但我有一個大腦放屁,我無法在任何地方找到答案。

好吧,這是我結束了去:

case when address2=" " or address2 is null then 'None Provided' 
    else address2 end as address2, 

有沒有更好的方式來實現這一目標?

+0

有沒有更好的辦法返回第一個非NULL值。你需要比較兩個值。 – 2013-03-05 18:57:25

回答

5

您可以使用CASE

select concat(first_name, " ", last_name) as CustomerName, 
    address, 
    case when address2 is null then 'None Provided' else address2 end as address2, 
    postal_code 
from customer 
inner join address 
using (address_id); 

甚至更​​好COALESCE

select concat(first_name, " ", last_name) as CustomerName, 
    address, 
    COALESCE(address2,'None Provided') as address2, 
    postal_code 
from customer 
inner join address 
using (address_id); 

如果數據包含一個空字符串或null,那麼我會考慮使用:

select concat(first_name, " ", last_name) as CustomerName, 
    address, 
    case 
    when address2 is null or address2 = '' 
    then 'None Provided' 
    else address2 end as address2, 
    postal_code 
from customer 
inner join address 
using (address_id); 
+1

謝謝!我結束了使用案例,因爲我無法合併工作。 – TaraX 2013-03-05 18:38:04

+0

感謝您的信息 - 我不知道接受答案。 :-) – TaraX 2013-03-05 22:46:48

+0

@TaraX沒問題,很多新用戶都知道。 :) – Taryn 2013-03-05 22:50:15

2

您可以使用內置的COALESCE函數來做到這一點。

返回列表中的第一個非NULL值,如果沒有 非NULL值,則返回NULL。

select concat(first_name, " ", last_name) as CustomerName, address, 
COALESCE(address2, 'None provided') as address2, postal_code 
from customer 
inner join address 
using (address_id); 
+0

我試過使用Coalesce和IfNull函數,但沒有顯示在我的結果中,只是地址2下的空字段。我認爲,出於某種原因,它不認爲該字段爲空,而是認爲它們有空間。是否有可能告訴MySql: 如果address2 =「」那麼「沒有提供」? – TaraX 2013-03-05 18:34:11

0
select concat(first_name, " ", last_name) as CustomerName, address, 
    COALESCE(address2,'none provided') as address2, postal_code 
    from customer 
    inner join address 
    using (address_id); 
0

使用COALESCE ...

select concat(first_name, " ", last_name) as CustomerName, address, COALESCE(address2, 'None provided') as address2, postal_code from customer inner join address using (address_id); 

COALESCE將在列表中

相關問題