如果没有中间名,我希望获得没有中间名首字母的全名,但如果“M_NAME”列为 Null,则 select 语句返回空。我该如何解决这个问题?
SELECT CONCAT(`Employee`.`F_NAME`, ' ', LEFT(`Employee`.`M_NAME`, 1), '. ', `Employee`.`L_NAME`) FROM `ccms`.`Employee` WHERE HR_ID = '223';
最佳答案
CONCAT
returns NULL
if any argument is null.您可以通过将任何可为空的列包装在 IFNULL
或 COALESCE
(后者可以接受两个以上的参数)中来确保没有空参数为空来解决此问题。
SELECT
CONCAT(
IFNULL(F_NAME, ''),
' ',
IFNULL(CONCAT(LEFT(M_NAME, 1), '. '), ''),
IFNULL(L_NAME, '')
)
FROM
ccms.Employee
WHERE
HR_ID = '223';
这样做是用空字符串替换 NULL
列值,这可能是您的意图。请注意,我更新了 M_NAME
的选择,以便仅在值不为 null 时才使用此行为添加句点。
编辑:如果需要,您可以使用反引号和限定列名,但这对于这个确切的查询不是必需的。
关于mysql - 如果 CONCAT 中有 'null' 值,则得到空结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15004286/