如何将列连接为null安全?

时间:2019-05-03 17:20:26

标签: mysql sql

这是我的代码:

SELECT COALESCE(CONCAT(u.user_fname, ' ', u.user_lname), 'unknown') name
FROM users u
WHERE id = 10;

unknownuser_fname为空时,结果将为user_lname。那不是我想要的,我只想在unknownuser_fname都为空时选择user_lname

否则,我想获取非空列的值。我该怎么办?

3 个答案:

答案 0 :(得分:5)

使用$(document).ajaxStart(function() { $("#loading").show(); }).ajaxStop(function() { $("#loading").hide(); });

concat_ws()

这样做的好处是,如果两个名称中的任何一个均为SELECT CONCAT_WS(' ', u.user_fname, u.user_lname) name FROM users u WHERE id = 10; ,结果中都不会出现乱码。

如果要将null转换为“未知”,会有些棘手。这应该可以解决问题:

NULL

答案 1 :(得分:2)

您可以使用:

SELECT COALESCE(
         TRIM(CONCAT(COALESCE(u.user_fname,''), ' ', COALESCE(u.user_lname,''))),
        'unknown') name
FROM users u
WHERE id = 10;

答案 2 :(得分:1)

我总是喜欢sql server(或oracle中的nvl)中的isull函数:

SELECT isnull(u.user_fname + ' ','') + isnull(u.user_lname, '') name
FROM users u
WHERE id=10

但是要切换为包含Null,我将使用一种情况:

SELECT
CASE WHEN u.user_fname IS NULL AND u.user_lname is NULL THEN 'unknown'
ELSE isnull(u.user_fname + ' ','') + isnull(u.user_lname, '') END name
FROM users u
WHERE id=10

是的,它比其他答案要长一些,但是如果您有其他条件,则更易于阅读,并且将来可能更加灵活。

这两种方式的性能均不受影响,因此取决于个人喜好。