我正在使用的DBMS是MySQL。
这是表格:
AUTHOR
author_id | first_name | last_name | patronymic
-----------------------------------------------
1 | John | Bush | NULL
2 | Sergey | Burov | Romanovich
3 | NULL | Filin | NULL
如果我发出此查询:
SELECT author_id,
CONCAT(first_name, ' ', last_name, ' ', patronymic) AS full_name
FROM author;
输出如下:
author_id | full_name
-----------------------------------
1 | NULL
2 | Sergey Burov Romanovich
3 | NULL
因此,从示例中可以看出,如果字段具有NULL值,则在连接过程中,整个事物将设置为NULL。请解释一下,如何让MySQL将NULL值转换为长度为0的字符串,或者只是使它不会连接NULL值?
提前谢谢大家。
答案 0 :(得分:5)
您可以使用CONCAT_WS使用分隔符连接字符串,并跳过空值:
SELECT author_id,
CONCAT_WS(' ', first_name, last_name, patronymic) AS full_name
FROM author;
请参阅小提琴here。
答案 1 :(得分:0)
这是直接回答您问题的方法:
SELECT author_id,
CONCAT(ISNULL(first_name,''), ' ',
ISNULL(last_name,''), ' ',
ISNULL(patronymic,'')) AS full_name
FROM author;
甚至是这个(用空中间名解决了双空格问题):
SELECT author_id,
CONCAT(ISNULL(CONCAT(first_name,' '),''),
ISNULL(CONCAT(last_name,' '),''),
ISNULL(patronymic,'')) AS full_name
FROM author;
但这将回答真正的问题 - 在这个或稍微复杂的情况下做好格式化的最佳解决方案:
答案 2 :(得分:0)
在所有列上使用COALESCE
以保证它们永远不会返回null(通过返回值或空字符串)
答案 3 :(得分:0)
SELECT author_id,
CONCAT(ifnull(first_name,''), ' ', ifnull(last_name,''), ' ', ifnull(patronymic,'')) AS full_name FROM author;