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

Как да замените NULL с друга стойност в SQL Server – ISNULL()

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

Това е, което ISNULL() функцията е за.

ISNULL() е T-SQL функция, която ви позволява да замените NULL с определена стойност по ваш избор.

Пример

Ето основна заявка, която връща малък набор от резултати:

SELECT TaskCode AS Result
FROM Tasks;

Резултат:

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

Можем да видим, че има три реда, които съдържат нулеви стойности.

Ако не искаме нулевите стойности да се показват като такива, можем да използваме ISNULL() за да замените null с различна стойност.

Като това:

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

Резултат:

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

Можем също да го заменим с празния низ:

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

Резултат:

Result
------
cat123
      
      
pnt456
rof789
        

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

Предотвратяване на изчезването на нулеви редове

Има някои T-SQL функции, при които нулевите стойности се елиминират от набора от резултати. В такива случаи нулевите стойности изобщо няма да бъдат върнати.

Въпреки че това може да е желан резултат в някои случаи, в други случаи може да е катастрофално, в зависимост от това какво трябва да направите с данните, след като бъдат върнати.

Един пример за такава функция е STRING_AGG() . Тази функция ви позволява да върнете резултатния набор като разделен списък. Въпреки това, той също така елиминира нулеви стойности от набора от резултати. Така че, ако използваме тази функция с горните примерни данни, ще получим три резултата вместо шест:

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

Резултат:

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

Така че трите реда, съдържащи нулеви стойности, не се връщат.

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

Следователно, ако искаме да запазим редовете с нулеви стойности, можем да използваме ISNULL() за да замените нулевите стойности с друга стойност:

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

Резултат:

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

Функцията COALESCE()

ISNULL() функцията работи по подобен начин на COALESCE() функция. Така че можем да заменим горния код с този:

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

И получете същия резултат:

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

Има обаче някои разлики в начина, по който се държат двете функции. За повече информация относно разликите, ето сравнение на COALESCE() и ISNULL() на уебсайта на 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. SQL Server 2016:Импортиране на данни

  2. Как да изтриете първите 1000 реда от таблица с помощта на Sql Server 2008?

  3. Подгответе нова виртуална машина за SQL Server 2014 CTP1

  4. SQL INSERT INTO от множество таблици

  5. SQL Server 2016:Създайте потребител на база данни