簡體   English   中英

使用帶有 IS NULL 和 IS NOT NULL 的案例語句

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM