在SQL中混淆ifnull()的行为

时间:2018-05-20 11:14:06

标签: mysql sql

我有这张表'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条件,对于那些没有中间名的客户,则为“null”值middlename中的lastname应替换为ifnull(middlename,lastname)

所以我想为什么不在这里使用select customer_number, firstname, middlename, lastname from customer_master; ,当我使用它时,我得到了一些有趣的结果。

  

在使用ifnull()之前

如果我不使用ifnull,那么我的结果表就像这样。

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

enter image description here

  

使用ifnull()

之后
middlename

enter image description here

我预计 lastname 中的所有空值都会被 middlename取代,但事实并非如此?为什么只有一些lastname行得到的 <div class="top-social-wrapper"> <?php gdlr_print_header_social(); ?> </div> 值不是全部? 任何解释?

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

1 个答案:

答案 0 :(得分:4)

如果您导入了数据,那么NULL可能真的是'NULL',请尝试:

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