如果CONCAT中存在“null”值,则获取空结果

时间:2013-02-21 14:08:06

标签: mysql sql database null

如果没有中间名,我希望获得没有中间名的全名,但如果列“M_NAME”为Null,则select语句返回空。我该如何解决这个问题?

   SELECT CONCAT(`Employee`.`F_NAME`, ' ', LEFT(`Employee`.`M_NAME`, 1), '. ', `Employee`.`L_NAME`) FROM `ccms`.`Employee` WHERE HR_ID = '223';

4 个答案:

答案 0 :(得分:2)

使用COALESCE()

  

返回列表中的第一个非NULL值,如果没有非NULL值,则返回NULL。

SELECT CONCAT(`Employee`.`F_NAME`, ' ', COALESCE(LEFT(`Employee`.`M_NAME`, 1), ''), '. ', `Employee`.`L_NAME`) FROM `ccms`.`Employee` WHERE HR_ID = '223';

答案 1 :(得分:2)

CONCAT returns NULL if any argument is null.您可以通过在IFNULLCOALESCE中包含任何可为空的列来确保没有null参数为空来解决此问题(后者可以使用两个以上的参数)。

SELECT
    CONCAT(
        IFNULL(F_NAME, ''),
        ' ',
        IFNULL(CONCAT(LEFT(M_NAME, 1), '. '), ''),
        IFNULL(L_NAME, '')
    )
FROM
    ccms.Employee
WHERE
    HR_ID = '223';

这样做是用空字符串替换NULL列值,这可能是你的意图。请注意,我更新了M_NAME的选择,以便只有在使用此行为时值不为空时才会添加句点。

编辑:如果需要,您可以使用反引号和限定列名称,但这不是必需的。

答案 2 :(得分:1)

使用IFNULL()

任何你可能有NULL字段的地方,用IFNULL(无论如何,'')包装它然后你会得到一个空字符串而不是结果 - 消除NULL。

答案 3 :(得分:-1)

另一个简单的解决方案是使用 CONCAT_WS 。它会有效地工作。

  

选择       CONCAT_WS( ''       F_NAME,       ',       左(M_NAME,1),       L_NAME)FROM       ccms.Employee WHERE HR_ID ='223';