MariaDB
 sql >> Baza danych >  >> RDS >> MariaDB

MariaDB NULLIF() Objaśnienie

W MariaDB funkcja NULLIF() funkcja zwraca NULL jeśli oba jego argumenty są równoważne. W przeciwnym razie zwraca pierwszy argument.

Składnia

Składnia wygląda tak:

NULLIF(expr1,expr2)

Przykład

Oto przykład do zademonstrowania:

SELECT NULLIF( 5, 5 );

Wynik:

NULL

W tym przypadku oba argumenty są identyczne, więc wynikiem jest NULL .

Kiedy argumenty nie są równoważne

Oto, co się dzieje, gdy argumenty nie są równoważne:

SELECT NULLIF( 5, 3 );

Wynik:

5

W takim przypadku zwracany jest pierwszy argument.

Struny

Oto przykład porównujący ciągi:

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

Wynik:

+------+-----------+
| Same | Different |
+------+-----------+
| NULL | Papaya    |
+------+-----------+

Daty

Oto przykład porównujący daty:

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

Wynik:

+------+------------+
| Same | Different  |
+------+------------+
| NULL | 2000-10-30 |
+------+------------+

Wyrażenia

NULLIF() ocenia bieżącą wartość wyrażeń. Dlatego jeśli przekażemy takie wyrażenie:

SELECT NULLIF( 10, 2 * 5 );

Otrzymujemy to:

NULL

2 pomnożone przez 5 daje 10, więc oba argumenty są równoważne.

Oto, co się stanie, jeśli zmienimy drugi argument:

SELECT NULLIF( 10, 3 * 5 );

Wynik:

10

Zwracany jest pierwszy argument.

Przykład bazy danych

Załóżmy, że uruchamiamy następujące zapytanie:

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

Wynik:

+---------------------+-----------------------+
| Name                | LocalName             |
+---------------------+-----------------------+
| Afghanistan         | Afganistan/Afqanestan |
| Albania             | Shqipëria             |
| Algeria             | Al-Jaza’ir/Algérie    |
| American Samoa      | Amerika Samoa         |
| Andorra             | Andorra               |
| Angola              | Angola                |
| Anguilla            | Anguilla              |
| Antarctica          | –                     |
| Antigua and Barbuda | Antigua and Barbuda   |
| Argentina           | Argentina             |
+---------------------+-----------------------+

Tutaj mamy nazwy krajów w lewej kolumnie, a lokalną nazwę odpowiedniego kraju w prawej.

Dodajmy NULLIF() do trzeciej kolumny naszego zapytania:

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

Wynik:

+---------------------+-----------------------+-----------------------+
| Name                | LocalName             | Local Name Different  |
+---------------------+-----------------------+-----------------------+
| Afghanistan         | Afganistan/Afqanestan | Afganistan/Afqanestan |
| Albania             | Shqipëria             | Shqipëria             |
| Algeria             | Al-Jaza’ir/Algérie    | Al-Jaza’ir/Algérie    |
| American Samoa      | Amerika Samoa         | Amerika Samoa         |
| Andorra             | Andorra               | NULL                  |
| Angola              | Angola                | NULL                  |
| Anguilla            | Anguilla              | NULL                  |
| Antarctica          | –                     | –                     |
| Antigua and Barbuda | Antigua and Barbuda   | NULL                  |
| Argentina           | Argentina             | NULL                  |
+---------------------+-----------------------+-----------------------+

Widzimy, że trzecia kolumna zwraca nazwę lokalną tylko wtedy, gdy jest inna niż wartość w Name kolumna. Jeśli jest taki sam, to NULL jest zwracany.

Alternatywnie możemy użyć NULLIF() aby filtrować wyniki naszych zapytań:

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

Wynik:

+----------------+-----------------------+
| Name           | LocalName             |
+----------------+-----------------------+
| Afghanistan    | Afganistan/Afqanestan |
| Albania        | Shqipëria             |
| Algeria        | Al-Jaza’ir/Algérie    |
| American Samoa | Amerika Samoa         |
| Antarctica     | –                     |
| Armenia        | Hajastan              |
| Austria        | Österreich            |
| Azerbaijan     | Azärbaycan            |
| Bahamas        | The Bahamas           |
| Bahrain        | Al-Bahrayn            |
+----------------+-----------------------+

W tym przypadku zwróciliśmy tylko te wiersze, w których nazwa lokalna jest inna niż Name kolumna.

NULLIF() vs CASE

Poniższy kod:

NULLIF(expr1,expr2)

jest odpowiednikiem następującego CASE wyrażenie:

CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END

Nieprawidłowa liczba parametrów

Przekazanie niewłaściwej liczby argumentów skutkuje błędem:

SELECT NULLIF( 10 );

Wynik:

ERROR 1582 (42000): Incorrect parameter count in the call to native function '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. ClusterControl 1.5 — automatyczna weryfikacja kopii zapasowej, budowanie urządzenia podrzędnego z kopii zapasowej i integracja z chmurą

  2. 4 sposoby na sortowanie bazy danych w MariaDB

  3. Jak działa NAJMNIEJ() w MariaDB

  4. Jak NOT REGEXP działa w MariaDB

  5. GODZINA() vs WYCIĄG(GODZINA…) w MariaDB:Jaka jest różnica?