Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.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 使用带有IS NULL和IS NOT NULL的Case语句_Mysql_Sql_Null - Fatal编程技术网

Mysql 使用带有IS NULL和IS NOT NULL的Case语句

Mysql 使用带有IS NULL和IS NOT NULL的Case语句,mysql,sql,null,Mysql,Sql,Null,这并没有给我想要的结果。当值不为null时,我得到“wasnull”,当实际为null时,我得到一个实际的MYSQL null值。我想要的是,当userName为null时,返回'wasnull',当userName不为null时,返回'wasnotnull'。我做错了什么 我有意尝试使用大小写表达式,而不是IF或IFNULL表达式来实现这一点。 使用MYSQL 8.0 SELECT userid, userName, CASE userName WHEN (

这并没有给我想要的结果。当值不为null时,我得到“wasnull”,当实际为null时,我得到一个实际的MYSQL null值。我想要的是,当userName为null时,返回'wasnull',当userName不为null时,返回'wasnotnull'。我做错了什么

我有意尝试使用大小写表达式,而不是IF或IFNULL表达式来实现这一点。
使用MYSQL 8.0

SELECT 
    userid, 
    userName,
    CASE userName
    WHEN (userName IS NULL) THEN 'was null'
        WHEN (userName IS NOT NULL) THEN 'was not null'
    END AS caseExpressionTest
FROM
    top_users
DB小提琴:

架构和插入语句:

SELECT 
    userid, 
    userName,
    CASE WHEN userName IS NULL THEN 'was null' else 'was not null' END AS caseExpressionTest
FROM
    top_users
查询:

 create table top_users (userid int, userName varchar(50));
 insert into top_users values(1,'user1');
 insert into top_users(userid) values(2);
输出:

用户ID 用户名 案例表达测试 1. 用户1 不为空 2.
您误用了
case
表达式。有两种形式。您需要的表格是:

 SELECT 
         userid, 
         userName,
         CASE WHEN userName IS NULL THEN 'was null' else 'was not null' END AS caseExpressionTest
     FROM
         top_users
注意:在
案例
之后没有
用户名

这将检查第一次停止时的每个条件

MySQL将布尔值解释为有效值。因此,您的版本是:

(CASE WHEN userName IS NULL THEN 'was null'
      WHEN userName IS NOT NULL THEN 'was not null'
 END) AS caseExpressionTest
这将返回
NULL

或:


大概,
userName
是一个字符串。这将根据前导数字将
用户名
转换为整数。如果没有前导数字,您将得到
0
,这就是为什么会有匹配。

这是一种有趣的方法,谢谢。我也很欣赏db小提琴,非常欢迎你。致以最良好的祝愿。感谢您的澄清回复。我能让它工作。您的回答表明我误解了docs()中的CASE语法及其两种形式。我还不清楚,但一切都在进行中。我将发布另一个问题以进一步澄清。
-- when userName is NULL
(CASE userName
    WHEN 0 THEN 'was null'
    WHEN 1 THEN 'was not null'
END AS caseExpressionTest
-- when userName is not NULL
(CASE userName
    WHEN 1 THEN 'was null'
    WHEN 0 THEN 'was not null'
END AS caseExpressionTest