В MySQL понякога не искате стойностите NULL да се връщат като NULL . Понякога искате NULL стойности да бъдат върнати с различна стойност, като например „N/A“, „Not Applicable“, „None“ или дори празния низ „“.
За щастие има няколко начина да направите това в MySQL.
Ето четири:
IFNULL()функцияCOALESCE()функцияIF()функция, комбинирана сIS NULL(илиIS NOT NULL) операторCASEизраз, комбиниран сIS NULL(илиIS NOT NULL) оператор
Примери за тези опции са по-долу.
Примерни данни
Първо, нека вземем някои примерни данни:
ИЗПОЛЗВАЙТЕ решения;ИЗБЕРЕТЕ TaskCodeFrom Tasks;
Резултат:
+---------+| Код на задачата |+---------+| gar123 || NULL || NULL || куче456 || NULL || cat789 |+----------+
Така че имаме три стойности NULL и три стойности, различни от NULL.
Функцията IFNULL()
Като се има предвид името му, това е може би най-очевидната опция за подмяна на NULL стойности в MySQL. Тази функция е основно еквивалент на ISNULL() в SQL Server.
IFNULL() функцията ви позволява да предоставите два аргумента. Първият аргумент се връща само ако не е NULL. Ако е NULL, вместо това се връща вторият аргумент.
Ето пример за използване на IFNULL() спрямо нашия примерен набор от данни:
ИЗБЕРЕТЕ IFNULL(TaskCode, 'N/A') КАТО Резултат ОТ Задачи;
Резултат:
<пред>+--------+| Резултат |+--------+| gar123 || N/A || N/A || куче456 || N/A || cat789 |+--------+
Тук просто заменихме NULL стойности с N/A .
Функцията COALESCE()
Тази функция е подобна на IFNULL() функция, но малко по-различна. Тази функция се придържа към стандарта ANSI SQL и е широко разгърната в различни RDBMS.
Начинът, по който работи, е, че предоставяте толкова аргументи, колкото са ви необходими. COALESCE() след това ще върне първия не-NULL стойност в списъка или NULL ако няма не-NULL стойности.
Като това:
ИЗБЕРЕТЕ COALESCE(TaskCode, 'N/A') КАТО Резултат ОТ Задачи;
Резултат:
<пред>+--------+| Резултат |+--------+| gar123 || N/A || N/A || куче456 || N/A || cat789 |+--------+Така получаваме точно същия резултат като преди.
Въпреки това, разликата с тази функция е, че, както споменахме, можете да предоставите списък с аргументи. COALESCE() функцията ще приеме коя е първата стойност, различна от NULL.
Така например бихме могли да добавим NULL като първи аргумент и поставете None преди N/A и вижте какво се случва:
ИЗБЕРЕТЕ СЪЕДИНЯВАНЕ(NULL, TaskCode, 'None', 'N/A') КАТО Резултат ОТ Задачи;
Резултат:
<пред>+--------+| Резултат |+--------+| gar123 || Няма || Няма || куче456 || Няма || cat789 |+--------+
Той пропусна първия NULL както се очакваше, тогава той пропусна всички NULL стойности в TaskCode колона, преди да се спрете на None . N/A стойността не се използва в този случай, защото None е първи и е стойност, различна от NULL.
Функцията IF() в комбинация с IS NULL/IS NOT NULL
IS NULL и IS NOT NULL операторите ви позволяват да тествате за NULL стойности и да представяте различна стойност в зависимост от резултата.
Можем да използваме тези оператори вътре в IF() функция, така че да се връщат стойности, различни от NULL, а стойностите NULL да се заменят със стойност по наш избор.
Пример:
ИЗБЕРЕТЕ АКО(TaskCode НЕ Е NULL, TaskCode, 'N/A') КАТО Резултат ОТ задачи;
Резултат:
<пред>+--------+| Резултат |+--------+| gar123 || N/A || N/A || куче456 || N/A || cat789 |+--------+
Така че резултатът е същият като при IFNULL() и COALESCE() функции.
И разбира се, бихме могли да разменим IS NOT NULL с IS NULL . Ако направим това, ще трябва да сменим и следващите аргументи:
ИЗБЕРЕТЕ IF(TaskCode IS NULL, 'N/A', TaskCode) КАТО Резултат ОТ задачи;
Изразът CASE, комбиниран с IS NULL/IS NOT NULL
Друг начин да го направите е да използвате CASE израз:
ИЗБЕРЕТЕ СЛУЧАЙ, КОГАТО TaskCode НЕ Е NULL, ТОГАВА TaskCode ELSE 'N/A' END AS ResultFROM Tasks;
Резултат:
<пред>+--------+| Резултат |+--------+| gar123 || N/A || N/A || куче456 || N/A || cat789 |+--------+
Както в предишния пример, това може да бъде пренаписано, за да се използва IS NULL вместо IS NOT NULL :
ИЗБЕРЕТЕ СЛУЧАЙ, КОГАТО TaskCode е NULL, ТОГАВА 'N/A' ИНАЧЕ TaskCode END AS ResultFROM Tasks;