Mysql
 sql >> Baza danych >  >> RDS >> Mysql

4 sposoby na zastąpienie wartości NULL inną wartością w MySQL

W MySQL czasami nie chcesz, aby wartości NULL były zwracane jako NULL . Czasami chcesz, aby wartości NULL były zwracane z inną wartością, na przykład „Nie dotyczy”, „Nie dotyczy”, „Brak” lub nawet pustym ciągiem „”.

Na szczęście w MySQL można to zrobić na kilka sposobów.

Oto cztery:

  • IFNULL() funkcja
  • COALESCE() funkcja
  • IF() funkcja połączona z IS NULL (lub IS NOT NULL ) operator
  • CASE wyrażenie połączone z IS NULL (lub IS NOT NULL ) operator

Przykłady tych opcji znajdują się poniżej.

Przykładowe dane

Najpierw weźmy przykładowe dane:

USE Solutions;
SELECT TaskCode
From Tasks;

Wynik:

+----------+
| TaskCode |
+----------+
| gar123   |
| NULL     |
| NULL     |
| dog456   |
| NULL     |
| cat789   |
+----------+

Mamy więc trzy wartości NULL i trzy wartości inne niż NULL.

Funkcja IFNULL()

Biorąc pod uwagę jego nazwę, jest to prawdopodobnie najbardziej oczywista opcja zastępowania wartości NULL w MySQL. Ta funkcja jest zasadniczo odpowiednikiem ISNULL() w SQL Server.

IFNULL() funkcja umożliwia podanie dwóch argumentów. Pierwszy argument jest zwracany tylko wtedy, gdy nie ma wartości NULL. Jeśli ma wartość NULL, zamiast tego zwracany jest drugi argument.

Oto przykład użycia IFNULL() w porównaniu z naszym przykładowym zestawem danych:

SELECT IFNULL(TaskCode, 'N/A') AS Result 
FROM Tasks;

Wynik:

+--------+
| Result |
+--------+
| gar123 |
| N/A    |
| N/A    |
| dog456 |
| N/A    |
| cat789 |
+--------+

Tutaj po prostu zastąpiliśmy wartości NULL przez N/A .

Funkcja COALESCE()

Ta funkcja jest podobna do IFNULL() funkcja, ale nieco inna. Ta funkcja jest zgodna ze standardem ANSI SQL i jest szeroko wdrażana w różnych systemach RDBMS.

Działa to tak, że podajesz tyle argumentów, ile potrzebujesz. COALESCE() zwróci wtedy pierwszą wartość inną niż NULL wartość na liście lub NULL jeśli nie ma wartości innych niż NULL wartości.

Tak:

SELECT COALESCE(TaskCode, 'N/A') AS Result 
FROM Tasks;

Wynik:

+--------+
| Result |
+--------+
| gar123 |
| N/A    |
| N/A    |
| dog456 |
| N/A    |
| cat789 |
+--------+

Otrzymujemy więc dokładnie ten sam wynik, co poprzednio.

Jednak różnica w przypadku tej funkcji polega na tym, że, jak wspomniano, możesz podać listę argumentów. COALESCE() funkcja przyjmie pierwszą wartość inną niż NULL.

Na przykład możemy dodać NULL jako pierwszy argument i umieść None przed N/A i zobacz, co się dzieje:

SELECT COALESCE(NULL, TaskCode, 'None', 'N/A') AS Result 
FROM Tasks;

Wynik:

+--------+
| Result |
+--------+
| gar123 |
| None   |
| None   |
| dog456 |
| None   |
| cat789 |
+--------+

Pominął pierwszy NULL zgodnie z oczekiwaniami, pominął wszystkie wartości NULL w TaskCode kolumna, przed ustawieniem na None . N/A wartość nie została w tym przypadku użyta, ponieważ None był pierwszy i nie ma wartości NULL.

Funkcja IF() w połączeniu z IS NULL/IS NOT NULL

IS NULL i IS NOT NULL Operatory umożliwiają testowanie pod kątem wartości NULL i prezentowanie różnych wartości w zależności od wyniku.

Możemy użyć tych operatorów wewnątrz IF() funkcji, dzięki czemu zwracane są wartości inne niż NULL, a wartości NULL są zastępowane przez wybraną przez nas wartość.

Przykład:

SELECT IF(TaskCode IS NOT NULL, TaskCode, 'N/A') AS Result 
FROM Tasks;

Wynik:

+--------+
| Result |
+--------+
| gar123 |
| N/A    |
| N/A    |
| dog456 |
| N/A    |
| cat789 |
+--------+

Czyli taki sam wynik jak w przypadku IFNULL() i COALESCE() funkcje.

I oczywiście możemy zamienić IS NOT NULLIS NULL . Jeśli to zrobimy, będziemy musieli zamienić również kolejne argumenty:

SELECT IF(TaskCode IS NULL, 'N/A', TaskCode) AS Result 
FROM Tasks;

Wyrażenie CASE w połączeniu z IS NULL/IS NOT NULL

Innym sposobem na to jest użycie CASE wyrażenie:

SELECT 
    CASE 
        WHEN TaskCode IS NOT NULL THEN TaskCode 
        ELSE 'N/A' 
    END AS Result
FROM Tasks;

Wynik:

+--------+
| Result |
+--------+
| gar123 |
| N/A    |
| N/A    |
| dog456 |
| N/A    |
| cat789 |
+--------+

Podobnie jak w poprzednim przykładzie, można to przepisać, używając IS NULL zamiast IS NOT NULL :

SELECT 
    CASE 
        WHEN TaskCode IS NULL THEN 'N/A' 
        ELSE TaskCode 
    END AS Result
FROM 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. Jak wstawić plik do bazy danych MySQL?

  2. Jak monitorować metryki HAProxy za pomocą ClusterControl

  3. Wybierz zapytanie mysql między datą?

  4. MySQL Great Circle Distance (wzór Haversine)

  5. Jak utworzyć użytkownika w MySQL