Mysql
 sql >> база данни >  >> RDS >> Mysql

4 начина за замяна на NULL с различна стойност в MySQL

В 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;

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изтегляне на MySQL dump от командния ред

  2. Как да покажа съпоставянето на колона в MySQL

  3. SQL ключове, MUL срещу PRI срещу UNI

  4. Как да направя размито съвпадение на имена на компании в MYSQL с PHP за автоматично довършване?

  5. mysqli::query():Не можах да извлечем mysqli