sql >> Databáze >  >> RDS >> Sqlserver

Jak nahradit NULL jinou hodnotou v SQL Server – ISNULL()

Při dotazování na databázi SQL Server mohou nastat situace, kdy nechcete, aby byly ve vaší sadě výsledků vráceny hodnoty null. A mohou nastat chvíle, kdy je budete chtít vrátit. Ale mohou také nastat situace, kdy je budete chtít vrátit, ale jako jinou hodnotu.

To je to, co ISNULL() funkce je pro.

ISNULL() je funkce T-SQL, která vám umožňuje nahradit NULL se zadanou hodnotou dle vašeho výběru.

Příklad

Zde je základní dotaz, který vrací malou sadu výsledků:

SELECT TaskCode AS Result
FROM Tasks;

Výsledek:

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

Vidíme, že existují tři řádky, které obsahují hodnoty null.

Pokud bychom nechtěli, aby se hodnoty null zobrazovaly jako takové, mohli bychom použít ISNULL() nahradit null s jinou hodnotou.

Takhle:

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

Výsledek:

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

Můžeme jej také nahradit prázdným řetězcem:

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

Výsledek:

Result
------
cat123
      
      
pnt456
rof789
        

Všimněte si, že ISNULL() vyžaduje, aby druhý argument byl typu, který lze implicitně převést na datový typ prvního argumentu. Je to proto, že vrací výsledek pomocí datového typu prvního argumentu.

Zabránění mizení nulových řádků

Existují některé funkce T-SQL, kde jsou z výsledné sady odstraněny hodnoty null. V takových případech nebudou hodnoty null vráceny vůbec.

I když to může být v některých případech žádoucí výsledek, v jiných případech to může být katastrofální, v závislosti na tom, co musíte udělat s daty po jejich vrácení.

Jedním příkladem takové funkce je STRING_AGG() . Tato funkce umožňuje vrátit sadu výsledků jako seznam s oddělovači. Však také eliminuje hodnoty null ze sady výsledků. Pokud tedy použijeme tuto funkci s výše uvedenými ukázkovými daty, skončíme se třemi výsledky namísto šesti:

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

Výsledek:

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

Takže tři řádky obsahující hodnoty null nejsou vráceny.

V mnoha případech je to perfektní výsledek, protože naše sada výsledků není přeplněná nulovými hodnotami. To však může také způsobit problémy v závislosti na tom, k čemu budou data použita.

Pokud tedy chceme zachovat řádky s hodnotami null, můžeme použít ISNULL() chcete-li nahradit hodnoty null jinou hodnotou:

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

Výsledek:

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

Funkce COALESCE()

ISNULL() funkce funguje podobným způsobem jako COALESCE() funkce. Výše uvedený kód bychom tedy mohli nahradit tímto:

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

A získáte stejný výsledek:

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

Existují však určité rozdíly ve způsobu, jakým se tyto dvě funkce chovají. Další informace o rozdílech najdete v porovnání COALESCE() a ISNULL() na webu společnosti Microsoft.


  1. Vyhledejte konkrétní řetězec ve sloupci Oracle clob

  2. Jak získat poslední den v měsíci v Oracle

  3. Jak vytvoříte uživatele pouze pro čtení v PostgreSQL?

  4. TO_CHAR(datetime) Funkce v Oracle