Непонятное поведение ifnull () в SQL - PullRequest
0 голосов
/ 20 мая 2018

У меня есть эта таблица '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_number, firstname, middlename и lastnameИз приведенной выше таблицы с условием, что для тех клиентов, у которых нет отчества, тогда «нулевое» значение в middlename должно быть заменено на lastname.

Поэтому я подумал, почему бы не использовать ifnull(middlename,lastname) здесь и когдая использовал его, затем получил интересные результаты.

Перед использованием ifnull ()

Если я не использую ifnull, тогда моя таблица результатов выглядит следующим образом.

select customer_number, firstname, middlename, lastname from customer_master;

enter image description here

После использования ifnull ()

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

enter image description here

Я ожидал, что все нулевые значения в middlename будут заменены на lastname, но почему этого не произошло?и почему только некоторые middlename строки получили значения lastname не все?Любое объяснение?

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

1 Ответ

0 голосов
/ 20 мая 2018

Если вы импортировали данные, возможно, NULL действительно 'NULL', поэтому попробуйте:

select . . .,
       (case when ltrim(rtrim(middlename)) = 'NULL' or middlename is null
             then lastname
             else middlename
        end) as middlename
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...