【问题标题】:Confusing behavior of ifnull() in SQLSQL 中 ifnull() 的令人困惑的行为
【发布时间】:2018-05-20 11:14:06
【问题描述】:

我有这张表 'customer_master' 和其中的一些值。

CREATE TABLE customer_master(
    CUSTOMER_NUMBER VARCHAR(6),
    FIRSTNAME VARCHAR(30),
    middlename VARCHAR(30),
    lastname VARCHAR(30),
    CUSTOMER_CITY VARCHAR(15),
    CUSTOMER_CONTACT_NO VARCHAR(10),
    occupation VARCHAR(10),
    CUSTOMER_DATE_OF_BIRTH DATE,
    CONSTRAINT customer_custid_pk PRIMARY KEY (CUSTOMER_NUMBER)
);

我想从上表中找到customer_numberfirstnamemiddlenamelastname,条件是对于那些没有中间名的客户,middlename 中的“null”值应替换为lastname.

所以我想为什么不在这里使用ifnull(middlename,lastname),当我使用它时,我得到了一些有趣的结果。

使用 ifnull() 之前

如果我不使用 ifnull 那么我的结果表如下所示。

select customer_number, firstname, middlename, lastname from customer_master;

使用 ifnull() 后

select customer_number ,firstname, ifnull(middlename, lastname) as 'Middle_Name' , lastname from customer_master;

我预计 middlename 中的所有空值都会被 lastname 替换,但没有发生,为什么?为什么只有一些middlename 行得到lastname 值不是全部? 有什么解释吗?

http://sqlfiddle.com/#!9/2c742b/3

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    如果你导入了数据,可能NULL真的是'NULL',所以试试:

    select . . .,
           (case when ltrim(rtrim(middlename)) = 'NULL' or middlename is null
                 then lastname
                 else middlename
            end) as middlename
    

    【讨论】:

      猜你喜欢
      • 2011-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多