2011-12-16 29 views
9

我正在編寫一個PHP和MySQL應用程序,其中我必須將多個列值連接成一個列。我會使用concat()函數,但它不會處理空值和concat_ws(),它不會返回我想要的輸出中的結果。 我需要的可以在Oracle數據庫中這樣來實現:MySQL查詢中的Concat值(處理空值)

Select 'The Surname Is'||last_name from employees; 

我的問題是如何能夠做到用MySQL..without上述命名的函數這個同樣的結果?

回答

24

CONCATIFNULL

SELECT 
    CONCAT('The Surname Is ', IFNULL(last_name, 'sadly not available')) 
FROM `employees` 
2

使用coalesce到Concat的一個空字符串

select concat(coalesce(null, '')); 
10

您還可以使用CONCAT_WS函數,它負責NULL值

SELECT 
CONCAT_WS(' ','The Surname Is',lastname) 
FROM `employees` 
6

@Minesh :CONCAT_WS不會「照顧」NULL值。爲了說明這一點...

CONCAT_WS("~",house.name,house.address,house.type) 

在上面的例子中,如果house.addressNULL返回的結果將不包含一個整潔的雙蒂爾達(~~),符合市場預期。這將是一個蒂爾達分開的列表,只有1蒂爾達。例如,「遊樂園的豪宅〜」

+1

它並與它一起的分離器中取出,在哪裏那個問題呢?這是一個整潔的解決方案,除非你想做其他的事情 – CME64 2014-12-31 13:28:26

0

一個小技巧:使用空字符串像CONCAT_WS分離器(有些時候,你wan't插入空格)

CONCAT_WS('','The Surname Is:',lastname) 
FROM `employees`