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

Как NULLIF() работи в SQL Server

В SQL Server, NULLIF() израз проверява стойността на два посочени израза. Връща стойност null, ако са равни, в противен случай връща първия израз.

Синтаксис

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

NULLIF ( expression , expression )

Пример

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

SELECT NULLIF(3, 3);

Резултат:

NULL

Тук и двата израза са равни и резултатът е нулева стойност.

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

SELECT NULLIF(3, 7);

Резултат:

3

Този път се връща първата стойност.

Ето пример, който капсулира и двата резултата:

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

Резултат:

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

Практически пример

Да предположим, че имаме таблица със следните данни:

SELECT 
    ProductName,
    ProductPrice
FROM Products;

Резултат:

+-------------------------------------+----------------+
| 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)

И да предположим, че искаме да разберем колко продукта имат положителна цена. С други думи, не искаме да включваме продукти, които имат цена, нулева или нулева стойност.

За да направим това, можем да използваме NULLIF() във връзка с COUNT() функция:

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

Резултат:

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

Получаваме 5, както се очаква, което е точно колко реда имат положителна стойност в ProductPrice колона.

Това работи, защото COUNT() функцията отчита само ненулеви стойности. Като преобразуваме нулевите суми в нула, можем да игнорираме тези стойности в нашето изчисление.

Ето го отново без NULLIF() функция.

SELECT COUNT(ProductPrice) AS Result
FROM Products;

Резултат:

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

Този път включва нулевите суми и получаваме 7. Той все още игнорира ред 6, защото той всъщност има нулева стойност.

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

Функцията не приема нулевата константа като първи аргумент:

SELECT NULLIF(null, 3);

Резултат:

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.

Както се казва в съобщението за грешка, типът на първия аргумент трябва да е известен. Връщаната стойност на функцията използва типа данни на първия израз и тази грешка отразява това.

Тази грешка трябва да е доста рядка. В повечето случаи ще предавате име на колона като първи аргумент, а в SQL Server колоните имат дефиниран тип данни. В такива случаи действително ще бъде приета нулева стойност, поради факта, че SQL Server знае типа данни на колоната.

Същото може да се каже и за променливите. Ако предадете променлива, ще трябва да декларирате нейния тип и следователно няма да получите грешката.

Невалиден брой аргументи

Извикването на функцията без предаване на аргументи води до грешка:

SELECT NULLIF();

Резултат:

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

И предаването на твърде много аргументи също води до грешка:

SELECT NULLIF(1, 2, 3);

Резултат:

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. Отместване на реда в SQL Server

  2. Как да промените колона от Null на Not Null в таблицата на SQL Server - SQL Server / T-SQL урок, част 52

  3. Как да добавите нова колона към съществуваща таблица в SQL Server (T-SQL)

  4. Преобразуване между типове данни за дата и час в SQL Server (примери за T-SQL)

  5. Комбинирайте две таблици, които нямат общи полета