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