使用带有 IS NULL 和 IS NOT NULL 的 Case 语句
Using a Case Statement With IS NULL and IS NOT NULL
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
这没有给我想要的结果。当值不为空时,我得到 'was null',当实际为空时,我得到一个实际的 MYSQL NULL 值。我想要的是,当 userName 为 null 时,return 'was null',当 userName 不为 null 时,return 'was not null'。我在这里做错了什么?
我有意尝试使用 CASE 表达式来执行此操作,而不是 IF 或 IFNULL 表达式。
使用 MYSQL 8.0.
SELECT
userid,
userName,
CASE WHEN userName IS NULL THEN 'was null' else 'was not null' END AS caseExpressionTest
FROM
top_users
DB-Fiddle:
架构和插入语句:
create table top_users (userid int, userName varchar(50));
insert into top_users values(1,'user1');
insert into top_users(userid) values(2);
查询:
SELECT
userid,
userName,
CASE WHEN userName IS NULL THEN 'was null' else 'was not null' END AS caseExpressionTest
FROM
top_users
输出:
userid
userName
caseExpressionTest
1
user1
was not null
2
<emnull</em
was null
dbhere
您误用了 case
表达式。有两种形式。您想要的表格是:
(CASE WHEN userName IS NULL THEN 'was null'
WHEN userName IS NOT NULL THEN 'was not null'
END) AS caseExpressionTest
注:CASE
后没有userName
。
这会检查每个条件在第一个停止。
MySQL 将布尔值解释为有效值。所以你的版本是:
-- when userName is NULL
(CASE userName
WHEN 0 THEN 'was null'
WHEN 1 THEN 'was not null'
END AS caseExpressionTest
这将 return NULL
。
或:
-- when userName is not NULL
(CASE userName
WHEN 1 THEN 'was null'
WHEN 0 THEN 'was not null'
END AS caseExpressionTest
据推测,userName
是一个字符串。这会将 userName
转换为基于前导数字的整数。如果没有前导数字,您将得到 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
这没有给我想要的结果。当值不为空时,我得到 'was null',当实际为空时,我得到一个实际的 MYSQL NULL 值。我想要的是,当 userName 为 null 时,return 'was null',当 userName 不为 null 时,return 'was not null'。我在这里做错了什么?
我有意尝试使用 CASE 表达式来执行此操作,而不是 IF 或 IFNULL 表达式。
使用 MYSQL 8.0.
SELECT
userid,
userName,
CASE WHEN userName IS NULL THEN 'was null' else 'was not null' END AS caseExpressionTest
FROM
top_users
DB-Fiddle:
架构和插入语句:
create table top_users (userid int, userName varchar(50));
insert into top_users values(1,'user1');
insert into top_users(userid) values(2);
查询:
SELECT
userid,
userName,
CASE WHEN userName IS NULL THEN 'was null' else 'was not null' END AS caseExpressionTest
FROM
top_users
输出:
userid | userName | caseExpressionTest |
---|---|---|
1 | user1 | was not null |
2 | <emnull</em | was null |
db
您误用了 case
表达式。有两种形式。您想要的表格是:
(CASE WHEN userName IS NULL THEN 'was null'
WHEN userName IS NOT NULL THEN 'was not null'
END) AS caseExpressionTest
注:CASE
后没有userName
。
这会检查每个条件在第一个停止。
MySQL 将布尔值解释为有效值。所以你的版本是:
-- when userName is NULL
(CASE userName
WHEN 0 THEN 'was null'
WHEN 1 THEN 'was not null'
END AS caseExpressionTest
这将 return NULL
。
或:
-- when userName is not NULL
(CASE userName
WHEN 1 THEN 'was null'
WHEN 0 THEN 'was not null'
END AS caseExpressionTest
据推测,userName
是一个字符串。这会将 userName
转换为基于前导数字的整数。如果没有前导数字,您将得到 0
,这就是匹配的原因。