这是我的代码:
SELECT COALESCE(CONCAT(u.user_fname, ' ', u.user_lname), 'unknown') name
FROM users u
WHERE id = 10;
当unknown
或user_fname
为空时,结果将为user_lname
。那不是我想要的,我只想在unknown
和user_fname
都为空时选择user_lname
。
否则,我想获取非空列的值。我该怎么办?
答案 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
是的,它比其他答案要长一些,但是如果您有其他条件,则更易于阅读,并且将来可能更加灵活。
这两种方式的性能均不受影响,因此取决于个人喜好。