Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak zastąpić NULL inną wartością w SQL Server – ISNULL()

Podczas wykonywania zapytań do bazy danych SQL Server mogą wystąpić sytuacje, w których nie chcesz, aby w zestawie wyników były zwracane wartości null. I mogą być chwile, w których chcesz, aby je zwrócono. Ale mogą być również sytuacje, w których chcesz je zwrócić, ale jako inną wartość.

To właśnie ISNULL() funkcja jest przeznaczona.

ISNULL() to funkcja T-SQL, która umożliwia zastąpienie NULL z określoną wartością do wyboru.

Przykład

Oto podstawowe zapytanie, które zwraca mały zestaw wyników:

SELECT TaskCode AS Result
FROM Tasks;

Wynik:

Result
------
cat123
null  
null  
pnt456
rof789
null  

Widzimy, że istnieją trzy wiersze zawierające wartości null.

Jeśli nie chcielibyśmy, aby wartości null pojawiały się jako takie, moglibyśmy użyć ISNULL() zastąpić null z inną wartością.

Tak:

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

Wynik:

Result
------
cat123
N/A   
N/A   
pnt456
rof789
N/A   

Możemy również zastąpić go pustym ciągiem:

SELECT ISNULL(TaskCode, '') AS Result 
FROM Tasks;

Wynik:

Result
------
cat123
      
      
pnt456
rof789
        

Zauważ, że ISNULL() wymaga, aby drugi argument był typu, który można niejawnie przekonwertować na typ danych pierwszego argumentu. Dzieje się tak, ponieważ zwraca wynik przy użyciu typu danych pierwszego argumentu.

Zapobieganie znikaniu pustych wierszy

Istnieje kilka funkcji T-SQL, w których wartości null są eliminowane z zestawu wyników. W takich przypadkach wartości null w ogóle nie zostaną zwrócone.

Chociaż w niektórych przypadkach może to być pożądany wynik, w innych może to być katastrofalne, w zależności od tego, co musisz zrobić z danymi po ich zwróceniu.

Jednym z przykładów takiej funkcji jest STRING_AGG() . Ta funkcja umożliwia zwrócenie zestawu wyników w postaci rozdzielanej listy. Jednak eliminuje również wartości null z zestawu wyników. Więc jeśli użyjemy tej funkcji z powyższymi przykładowymi danymi, otrzymalibyśmy trzy wyniki zamiast sześciu:

SELECT STRING_AGG(TaskCode, ', ') AS Result 
FROM Tasks;

Wynik:

Result                
----------------------
cat123, pnt456, rof789

Tak więc trzy wiersze zawierające wartości null nie są zwracane.

W wielu przypadkach jest to doskonały wynik, ponieważ nasz zestaw wyników nie jest zaśmiecony wartościami null. Może to jednak również powodować problemy, w zależności od tego, do czego dane będą wykorzystywane.

Dlatego, jeśli chcemy zachować wiersze z wartościami null, możemy użyć ISNULL() aby zastąpić wartości null inną wartością:

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

Wynik:

Result                                        
-------------------------------------
cat123, N/A, N/A, pnt456, rof789, N/A

Funkcja COALESCE()

ISNULL() funkcja działa podobnie do COALESCE() funkcjonować. Możemy więc zastąpić powyższy kod następującym:

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

I uzyskaj ten sam wynik:

Result                                        
-------------------------------------
cat123, N/A, N/A, pnt456, rof789, N/A

Istnieją jednak pewne różnice w zachowaniu tych dwóch funkcji. Aby uzyskać więcej informacji na temat różnic, oto porównanie COALESCE() i ISNULL() na stronie Microsoft.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zresetuj AutoIncrement w SQL Server po usunięciu

  2. Seminarium internetowe:Śledzenie postępu zapytań w SQL Server

  3. Podstawy dziennika transakcji SQL Server

  4. Najszybsza metoda wstawiania, aktualizowania i wybierania programu SQL Server

  5. Różnica między bazą danych a schematem