mysql - 如果 CONCAT 中有 'null' 值,则得到空结果

标签 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';

最佳答案

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

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/

相关文章:

php - 更新MySQL数据库中的加密密码

SQL更新查询

mysql - 如何访问单向ManyToOne关联的目标实体的方法

mysql - 将外键插入表中

sql - 与此格式一起使用时,postgres 中的 db_link 是否会自动关闭连接?如何自动关闭postgres dblink?

java - 为什么文本字段总是返回 null?

mysql - 浮点值超出范围

mysql - mysqldump 命令中的语法错误

mysql - SQL更新语句

mysql - 创建mysql函数时出错