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

MySQL IFNULL() Обяснено

MySQL има IFNULL() функция, която ни позволява лесно да заменим NULL стойности с друга стойност.

Синтаксис

IFNULL(expr1,expr2)

Ако expr1 не е NULL , IFNULL() връща expr1 ; в противен случай връща expr2 .

Пример

Ето основен пример, който използва NULL константа:

SELECT IFNULL( null, 'n/a' );

Резултат:

n/a

В този случай използвах IFNULL() за да замените стойността NULL с низа n/a .

Ето какво се случва, когато първият аргумент не е NULL :

SELECT IFNULL( 'Cow', 'n/a' );

Резултат:

Cow

В този случай се връща първият аргумент, защото не е NULL .

Пример за база данни

Да предположим, че изпълняваме следната заявка:

SELECT
    PetName,
    DOB
FROM Pets;

Резултат:

+---------+------------+
| PetName | DOB        |
+---------+------------+
| Fluffy  | 2020-11-20 |
| Fetch   | 2019-08-16 |
| Scratch | 2018-10-01 |
| Wag     | 2020-03-15 |
| Tweet   | 2020-11-28 |
| Fluffy  | 2020-09-17 |
| Bark    | NULL       |
| Meow    | NULL       |
| Woof    | 2020-10-03 |
| Ears    | 2022-01-11 |
+---------+------------+

Можем да видим, че два реда имат стойности NULL в колоната DOB.

В следната заявка използваме IFNULL() за да замените стойностите NULL с по-смислена стойност за четеца:

SELECT
    PetName,
    IFNULL( DOB, 'None supplied' )
FROM Pets;

Резултат:

+---------+--------------------------------+
| PetName | IFNULL( DOB, 'None supplied' ) |
+---------+--------------------------------+
| Fluffy  | 2020-11-20                     |
| Fetch   | 2019-08-16                     |
| Scratch | 2018-10-01                     |
| Wag     | 2020-03-15                     |
| Tweet   | 2020-11-28                     |
| Fluffy  | 2020-09-17                     |
| Bark    | None supplied                  |
| Meow    | None supplied                  |
| Woof    | 2020-10-03                     |
| Ears    | 2022-01-11                     |
+---------+--------------------------------+

Изрази

Изчислява се текущата стойност на първия аргумент. Следователно, ако предоставим израз като следния:

SELECT IFNULL( 2 * 5, 0 );

Получаваме това:

10

Така че не получаваме 2 * 5 част. Получаваме резултата от този израз (който в този случай е 10 ).

Същото е вярно, когато резултатът от израза е NULL :

SELECT IFNULL( 2 / 0, 0 );

Получаваме това:

0.0000

Все пак си струва да се внимава. Нулата е стойност. NULL не е.

В горния пример върнах нула, когато имаше стойност NULL, но това може да бъде подвеждащо или дори напълно погрешно. Представете си, ако делим цените и резултатът е нула. Добре, ако разделим цената на нула, вероятно нещо друго не е наред, но съм сигурен, че разбирате мнението ми.

Във всеки случай обикновено е по-добре да използвате по-смислена стойност, която да предаде на читателя, че няма стойност.

Пример:

SELECT IFNULL( 2 / 0, 'No value' );

Резултат:

No value

  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 и лятно часово време – как да направя справка с допълнителния час?

  2. Как мога да вмъкна много редове в MySQL таблица и да върна новите идентификатори?

  3. Как да конвертирате низ в шестнадесетичен в MySQL – HEX()

  4. MySQL заявка за присъединяване с помощта на like?

  5. 2 начина за връщане на редове, които съдържат само не-буквени знаци в MySQL