如果没有中间名,我希望获得没有中间名的全名,但如果列“M_NAME”为Null,则select语句返回空。我该如何解决这个问题?
SELECT CONCAT(`Employee`.`F_NAME`, ' ', LEFT(`Employee`.`M_NAME`, 1), '. ', `Employee`.`L_NAME`) FROM `ccms`.`Employee` WHERE HR_ID = '223';
答案 0 :(得分:2)
返回列表中的第一个非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.您可以通过在IFNULL
或COALESCE
中包含任何可为空的列来确保没有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';