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

Jak NULLIF() działa w SQL Server

W SQL Server NULLIF() wyrażenie sprawdza wartość dwóch określonych wyrażeń. Zwraca wartość null, jeśli są równe, w przeciwnym razie zwraca pierwsze wyrażenie.

Składnia

Składnia wygląda tak:

NULLIF ( expression , expression )

Przykład

Oto przykład do zademonstrowania:

SELECT NULLIF(3, 3);

Wynik:

NULL

Tutaj oba wyrażenia są równe, więc wynikiem jest wartość pusta.

Oto, co się dzieje, gdy wyrażenia nie są równe:

SELECT NULLIF(3, 7);

Wynik:

3

Tym razem zwracana jest pierwsza wartość.

Oto przykład, który zawiera oba wyniki:

SELECT 
    NULLIF(0, 0) AS a,
    NULLIF(3, 3) AS b,
    NULLIF(3, 0) AS c,
    NULLIF(0, 3) AS d;

Wynik:

+------+------+-----+-----+
| a    | b    | c   | d   |
|------+------+-----+-----|
| NULL | NULL | 3   | 0   |
+------+------+-----+-----+

Praktyczny przykład

Załóżmy, że mamy tabelę z następującymi danymi:

SELECT 
    ProductName,
    ProductPrice
FROM Products;

Wynik:

+-------------------------------------+----------------+
| ProductName                         | ProductPrice   |
|-------------------------------------+----------------|
| Left handed screwdriver             | 25.99          |
| Long Weight (blue)                  | 14.75          |
| Long Weight (green)                 | 11.99          |
| Smash 2000 Sledgehammer             | 0.00           |
| Chainsaw (includes 3 spare fingers) | 0.00           |
| Straw Dog Box                       | NULL           |
| Bottomless Coffee Mugs (4 Pack)     | 9.99           |
| Right handed screwdriver            | 25.99          |
+-------------------------------------+----------------+
(8 rows affected)

I załóżmy, że chcemy dowiedzieć się, ile produktów ma dodatnią cenę. Innymi słowy, nie chcemy uwzględniać produktów, które mają cenę, zero lub wartość null.

Aby to zrobić, możemy użyć NULLIF() w połączeniu z COUNT() funkcja:

SELECT 
    COUNT(NULLIF(ProductPrice, 0.00)) AS Result
FROM Products;

Wynik:

+----------+
| Result   |
|----------|
| 5        |
+----------+
Warning: Null value is eliminated by an aggregate or other SET operation.

Otrzymujemy 5 zgodnie z oczekiwaniami, czyli dokładnie ile wierszy ma dodatnią wartość w ProductPrice kolumna.

Działa to, ponieważ COUNT() funkcja zlicza tylko wartości inne niż null. Konwertując wartości zerowe na null, jesteśmy w stanie zignorować te wartości w naszych obliczeniach.

Oto znowu bez NULLIF() funkcja.

SELECT COUNT(ProductPrice) AS Result
FROM Products;

Wynik:

+----------+
| Result   |
|----------|
| 7        |
+----------+
Warning: Null value is eliminated by an aggregate or other SET operation.

Tym razem zawiera kwoty zerowe, a otrzymujemy 7. Nadal ignoruje wiersz 6, ponieważ w rzeczywistości ma on wartość null.

Kiedy pierwszym argumentem jest stała zerowa

Funkcja nie akceptuje stałej null jako pierwszego argumentu:

SELECT NULLIF(null, 3);

Wynik:

Msg 4151, Level 16, State 1, Line 1
The type of the first argument to NULLIF cannot be the NULL constant because the type of the first argument has to be known.

Jak mówi komunikat o błędzie, typ pierwszego argumentu musi być znany. Wartość zwracana przez funkcję wykorzystuje typ danych pierwszego wyrażenia, a ten błąd to odzwierciedla.

Ten błąd powinien być dość rzadki. W większości przypadków jako pierwszy argument przekażesz nazwę kolumny, a w SQL Server kolumny mają zdefiniowany typ danych. W takich przypadkach wartość null będzie faktycznie akceptowana, ponieważ SQL Server zna typ danych kolumny.

To samo można powiedzieć o zmiennych. Jeśli przekażesz zmienną, będziesz musiał zadeklarować jej typ, a zatem nie otrzymasz błędu.

Nieprawidłowa liczba argumentów

Wywołanie funkcji bez przekazywania jakichkolwiek argumentów skutkuje błędem:

SELECT NULLIF();

Wynik:

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near ')'.

Przekazywanie zbyt wielu argumentów również powoduje błąd:

SELECT NULLIF(1, 2, 3);

Wynik:

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near ','.

  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 usunąć właściwość tożsamości kolumny w tabeli SQL Server — samouczek SQL Server / T-SQL 44

  2. Równoważnik funkcji Split w T-SQL?

  3. Model odzyskiwania zmian SQL Server

  4. Jak dodać lub upuścić kolumnę za pomocą graficznego interfejsu użytkownika w SQL Server — samouczek SQL Server / T-SQL, część 39

  5. sql server 2008 management studio nie sprawdza składni mojego zapytania