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

SQL - Разлика между COALESCE и ISNULL?

Сравняване на COALESCE и ISNULL

Функцията ISNULL и изразът COALESCE имат сходно предназначение, но могат да се държат различно.

  1. Тъй като ISNULL е функция, тя се оценява само веднъж. Както е описано по-горе, входните стойности за израза COALESCE могат да бъдат оценени многократно.
  2. Определянето на типа данни на резултантния израз е различно. ISNULL използва типа данни на първия параметър, COALESCE следва правилата за израза CASE и връща типа данни стойност с най-висок приоритет.
  3. Възможността на NULL на резултатния израз е различна за ISNULL и COALESCE. Връщаната стойност ISNULL винаги се счита, че НЕ НУЛЕВА (ако се приеме, че връщаната стойност е без нула), докато COALESCE с ненулеви параметри се счита за NULL. Така че изразите ISNULL(NULL, 1) и COALESCE(NULL, 1), въпреки че са еквивалентни, имат различни стойности за нула. Това прави разлика, ако използвате тези изрази в изчислени колони, създавате ключови ограничения или правите връщаната стойност на скаларен UDF детерминистична, така че да може да бъде индексирана, както е показано в следващия пример.
> USE tempdb; 
> GO

> -- This statement fails because the PRIMARY KEY cannot accept NULL values
> -- and the nullability of the COALESCE expression for col2 
> -- evaluates to NULL. 

> CREATE TABLE #Demo  (  col1 integer NULL,  col2 AS COALESCE(col1, 0) PRIMARY KEY,  col3 AS ISNULL(col1, 0)  ); 
> 
> -- This statement succeeds because the nullability of the 
> -- ISNULL function evaluates AS NOT NULL.
> 
> CREATE TABLE #Demo  (  col1 integer NULL,  col2 AS COALESCE(col1, 0), 
> col3 AS ISNULL(col1, 0) PRIMARY KEY  );

Валидациите за ISNULL и COALESCE също са различни. Например, стойност NULL за ISNULL се преобразува в int, докато за COALESCE трябва да предоставите тип данни. ISNULL приема само 2 параметъра, докато COALESCE приема променлив брой параметри.

Източник:BOL



  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 с помощта на функцията SUBSTRING().

  2. Преобразуване на дата и култура:Разлика между DATE и DATETIME

  3. Проверете дали съществува ред, в противен случай вмъкнете

  4. Как да изчислим възрастта (в години) въз основа на датата на раждане и getDate()

  5. SQL Server Промяна на модела за възстановяване