[英]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
這並沒有給我想要的結果。 當該值不是 null 時,我得到“為空”,而實際上是 null 時,我得到一個實際的 MYSQL Z64C3E2286B4D0287 值。 我想要的是當用戶名是 null 時,返回“為空”,當用戶名不是 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-小提琴:
模式和插入語句:
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
Output:
用戶身份 | 用戶名 | 案例表達測試 |
---|---|---|
1 | 用戶1 | 不是 null |
2 | <emnull</em | 是 null |
db<小提琴在這里
您在濫用case
表達式。 有兩個 forms。 你想要的形式是:
(CASE WHEN userName IS NULL THEN 'was null'
WHEN userName IS NOT NULL THEN 'was not null'
END) AS caseExpressionTest
注意: userName
后面沒有用戶CASE
。
這將檢查首先停止的每個條件。
MySQL 將布爾值解釋為有效值。 所以你的版本是:
-- when userName is NULL
(CASE userName
WHEN 0 THEN 'was null'
WHEN 1 THEN 'was not null'
END AS caseExpressionTest
這將返回NULL
。
或者:
-- when userName is not NULL
(CASE userName
WHEN 1 THEN 'was null'
WHEN 0 THEN 'was not null'
END AS caseExpressionTest
大概, userName
是一個字符串。 這將根據前導數字將userName
轉換為 integer。 如果沒有前導數字,則會得到0
,這就是匹配的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.