Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何将列设置为空安全?_Mysql_Sql - Fatal编程技术网

Mysql 如何将列设置为空安全?

Mysql 如何将列设置为空安全?,mysql,sql,Mysql,Sql,这是我的密码: SELECT COALESCE(CONCAT(u.user_fname, ' ', u.user_lname), 'unknown') name FROM users u WHERE id = 10; 当user_fname或user_lname为null时,结果将未知。这不是我想要的,我只想在user_fname和user_lname都为null时选择unknown 否则,我想获取NOTNULL列的值。我怎样才能做到这一点?您可以使用: SELECT COALESCE(

这是我的密码:

SELECT COALESCE(CONCAT(u.user_fname, ' ', u.user_lname), 'unknown') name
FROM users u
WHERE id = 10;
当user_fname或user_lname为null时,结果将未知。这不是我想要的,我只想在user_fname和user_lname都为null时选择unknown

否则,我想获取NOTNULL列的值。我怎样才能做到这一点?

您可以使用:

SELECT COALESCE(
         TRIM(CONCAT(COALESCE(u.user_fname,''), ' ', COALESCE(u.user_lname,''))),
        'unknown') name
FROM users u
WHERE id = 10;
您可以使用:

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

这样做的好处是,如果两个名称中的任何一个都为null,那么结果中就不会出现虚假的空格

如果要将空值转换为未知值,则会有点棘手。这应该可以做到:

SELECT COALESCE(NULLIF(CONCAT_WS(' ', u.user_fname, u.user_lname) , ''), 'unknown') as name
FROM users u
WHERE id = 10;
使用concat_ws:

这样做的好处是,如果两个名称中的任何一个都为null,那么结果中就不会出现虚假的空格

如果要将空值转换为未知值,则会有点棘手。这应该可以做到:

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

我总是喜欢sql server中的isnull函数或oracle中的nvl:

SELECT isnull(u.user_fname + ' ','') + isnull(u.user_lname, '') name
FROM users u
WHERE id=10
但要切换包含空值,我将使用一个案例:

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
是的,它比其他答案长一点,但更容易阅读,将来如果你有其他情况,可能会更灵活


这两种方法对性能的影响都不大,所以这取决于个人喜好。

我一直喜欢sql server中的isnull函数或oracle中的nvl:

SELECT isnull(u.user_fname + ' ','') + isnull(u.user_lname, '') name
FROM users u
WHERE id=10
但要切换包含空值,我将使用一个案例:

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
是的,它比其他答案长一点,但更容易阅读,将来如果你有其他情况,可能会更灵活


无论哪种方式,都不是真正的演出成功,所以这取决于个人喜好。

非常感谢。非常感谢。@PaulX。标准函数是COALESCE,基本上在所有数据库中都可以使用。@PaulX。标准函数是COALESCE,基本上在所有数据库中都可用。