Как да използвате функцията COALESCE в SQL Server

Сблъсквали ли сте се някога със ситуация, в която трябва да обработвате NULL стойности във вашите заявки? Например, може да искате да покажете стойност по подразбиране, когато дадена колона е NULL, или да комбинирате няколко колони в една и да изберете първата не-NULL стойност. В тази публикация в блога ще ви покажем как да използвате функцията COALESCE в SQL Server, за да постигнете тези и други задачи.

Какво представлява функцията COALESCE?

Функцията COALESCE е вградена функция в SQL Server, която оценява списък с изрази и връща първия, който не е NULL. Ако всички изрази са NULL, тогава функцията връща NULL.

Синтаксисът на функцията COALESCE е:

COALESCE (expression1, expression2, ..., expressionN)

Изразите могат да бъдат от всякакъв тип, но трябва да са съвместими един с друг. Типът данни на резултата се определя от израза с най-висок приоритет.

Как да използвате функцията COALESCE

Нека видим някои примери за това как да използвате функцията COALESCE в SQL Server.

Пример 1: Показване на стойност по подразбиране, когато колона е NULL

Да предположим, че имаме таблица, наречена Products, която съхранява информация за някои продукти, като тяхното име, цена и категория. Някои продукти нямат зададена категория, така че колоната Category е NULL за тях.

Ако искаме да покажем продуктите с техните категории, но да заменим стойностите NULL със стойност по подразбиране, като например „Неизвестен“, можем да използваме функцията COALESCE, както следва:

SELECT Name, Price, COALESCE(Category, 'Unknown') AS Category
FROM Products;

Резултатът е:

Както можете да видите, функцията COALESCE връща стойността на Category, ако не е NULL, в противен случай връща „Неизвестно“.

Пример 2: Комбинирайте няколко колони в една и изберете първата не-NULL стойност

Да предположим, че имаме друга таблица, наречена Contacts, която съхранява информация за някои контакти, като тяхното име, имейл, телефон и адрес. Някои контакти нямат попълнени всички тези данни, така че някои колони са NULL за тях.

Ако искаме да покажем контактите с техния предпочитан метод за контакт, който е първата не-NULL стойност сред имейл, телефон и адрес, можем да използваме функцията COALESCE, както следва:

SELECT Name, COALESCE(Email, Phone, Address) AS PreferredContact
FROM Contacts;

Резултатът е:

Както можете да видите, функцията COALESCE връща първата не-NULL стойност сред имейл, телефон и адрес за всеки контакт.

Как да се справим с това по стария начин и какво предлага COALESCE

Преди функцията COALESCE да бъде въведена в SQL Server, трябваше да използваме други методи за обработка на NULL стойности в нашите заявки. Например, можем да използваме функцията ISNULL или израза CASE.

Функцията ISNULL приема два аргумента и връща първия, ако не е NULL, в противен случай връща втория. Например:

SELECT Name, ISNULL(Category, 'Unknown') AS Category
FROM Products;

Тази заявка дава същия резултат като използването на COALESCE с два аргумента. Има обаче някои разлики между ISNULL и COALESCE:

  • ISNULL приема само два аргумента, докато COALESCE може да приеме произволен брой аргументи.
  • ISNULL използва типа данни на първия аргумент за резултата, докато COALESCE следва правилата за израз CASE и връща типа данни на стойността с най-висок приоритет.
  • ISNULL се оценява само веднъж, докато COALESCE може да се оценява многократно. Това може да повлияе на производителността и последователността на резултатите, особено когато се използват подзаявки или недетерминирани функции.

Изразът CASE е условен израз, който ни позволява да извършваме различни действия въз основа на различни условия. Например:

SELECT Name, CASE WHEN Category IS NOT NULL THEN Category ELSE 'Unknown' END AS Category
FROM Products;w

Тази заявка дава същия резултат като използването на COALESCE с два аргумента. Има обаче някои разлики между CASE и COALESCE:

  • CASE е по-подробен и сложен от COALESCE, особено когато се работи с множество изрази.
  • CASE може да обработва по-сложна логика и условия от COALESCE, който проверява само за NULL стойности.
  • CASE и COALESCE могат да имат различни последици за производителността в зависимост от оптимизатора на заявки и плана за изпълнение.

Както можете да видите, функцията COALESCE осигурява по-прост и по-последователен начин за обработка на NULL стойности в SQL Server. Освен това е по-гъвкав и съвместим от функцията ISNULL или израза CASE.

Заключение

В тази публикация в блога научихме как да използваме функцията COALESCE в SQL Server, за да обработваме NULL стойности в нашите заявки. Видяхме някои примери за това как да се покаже стойност по подразбиране, когато колона е NULL, или да се комбинират няколко колони в една и да се избере първата стойност, която не е NULL. Също така сравнихме функцията COALESCE с други методи като ISNULL и CASE и обсъдихме техните предимства и недостатъци.