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

MariaDB NULLIF() Обяснено

В MariaDB, NULLIF() функцията връща NULL ако и двата му аргумента са еквивалентни. В противен случай връща първия аргумент.

Синтаксис

Синтаксисът е така:

NULLIF(expr1,expr2) 

Пример

Ето пример за демонстрация:

SELECT NULLIF( 5, 5 ); 

Резултат:

NULL

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

Когато аргументите не са еквивалентни

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

SELECT NULLIF( 5, 3 ); 

Резултат:

5

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

Стрингове

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

SELECT 
    NULLIF( 'Papaya', 'Papaya' ) AS "Same",
    NULLIF( 'Papaya', 'Salad' ) AS "Different"; 

Резултат:

+------+-----------+| Същото | Различни |+------+-----------+| NULL | Папая |+------+-----------+

Дати

Ето пример, който сравнява датите:

SELECT 
    NULLIF( DATE '2000-10-30', DATE '2000-10-30' ) AS "Same",
    NULLIF( DATE '2000-10-30', DATE '1999-10-30' ) AS "Different"; 

Резултат:

+------+------------+| Същото | Различни |+------+------------+| NULL | 2000-10-30 |+------+-----------+

Изрази

NULLIF() оценява текущата стойност на изразите. Следователно, ако предадем израз като този:

SELECT NULLIF( 10, 2 * 5 ); 

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

NULL

2, умножено по 5, е 10, така че двата аргумента са еквивалентни.

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

SELECT NULLIF( 10, 3 * 5 ); 

Резултат:

10

Първият аргумент се връща.

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

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

SELECT 
    Name,
    LocalName
FROM country 
ORDER BY Name ASC
LIMIT 10; 

Резултат:

+---------------------+-----------------------+ | Име | Локално име |+---------------------+-----------------------+| Афганистан | Афганистан/Афканестан || Албания | Шкиперия || Алжир | Ал-Джазаир/Алжир || Американска Самоа | Америка Самоа || Андора | Андора || Ангола | Ангола || Ангуила | Ангила || Антарктида | – || Антигуа и Барбуда | Антигуа и Барбуда || Аржентина | Аржентина |+---------------------+-----------------------+ 

Тук имаме имена на държави в лявата колона, а местното име за съответната държава в дясната.

Нека добавим NULLIF() към трета колона на нашата заявка:

SELECT 
    Name,
    LocalName,
    NULLIF(LocalName, Name) AS "Local Name Different"
FROM country 
ORDER BY Name ASC
LIMIT 10; 

Резултат:

+---------------------+-----------------------+ -----------------------+| Име | Локално име | Местно име различно |+---------------------+----------------------- +-----------------------+| Афганистан | Афганистан/Афканестан | Афганистан/Афканестан || Албания | Шкиперия | Шкиперия || Алжир | Ал-Джазаир/Алжир | Ал-Джазаир/Алжир || Американска Самоа | Америка Самоа | Америка Самоа || Андора | Андора | NULL || Ангола | Ангола | NULL || Ангуила | Ангуила | NULL || Антарктида | – | – || Антигуа и Барбуда | Антигуа и Барбуда | NULL || Аржентина | Аржентина | NULL |+---------------------+-----------------------+- ---------------------+

Можем да видим, че третата колона връща локалното име само ако е различно от стойността в Name колона. Ако е същото, тогава NULL се връща.

Като алтернатива можем да използваме NULLIF() за филтриране на резултатите от нашите заявки:

SELECT 
    Name,
    LocalName
FROM country 
WHERE NULLIF(LocalName, Name) IS NOT NULL
ORDER BY Name ASC
LIMIT 10; 

Резултат:

+----------------+-----------------------+| Име | Локално име |+----------------+--------------------------------+| Афганистан | Афганистан/Афканестан || Албания | Шкиперия || Алжир | Ал-Джазаир/Алжир || Американска Самоа | Америка Самоа || Антарктида | – || Армения | Хаджастан || Австрия | Österreich || Азербайджан | Azärbaycan || Бахамите | Бахамите || Бахрейн | Ал-Бахрейн |+----------------+--------------------------------+

В този случай върнахме само онези редове, където локалното име е различно от Name колона.

NULLIF() срещу CASE

Следният код:

NULLIF(expr1,expr2) 

е еквивалентен на следния CASE израз:

CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END 

Неправилен брой параметри

Предаването на грешен брой аргументи води до грешка:

SELECT NULLIF( 10 ); 

Резултат:

ГРЕШКА 1582 (42000):Неправилен брой на параметрите в извикването на естествена функция „NULLIF“

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MaxScale Basic Management Използвайки MaxCtrl за MariaDB Cluster

  2. Как да инсталирате MariaDB 10 на Debian и Ubuntu

  3. Как да инсталирате MariaDB на Rocky Linux и AlmaLinux

  4. Как да настроите наречени часови зони в MariaDB

  5. Сравняване на MariaDB Enterprise Backup с ClusterControl Backup Management