SQL Server har infört flera sätt att hantera NULL-värden. De funktioner som är mest använda för att hantera NULLs är KOLESSE och ISNULL i SQL Server. Dessa funktioner används för att hitta icke-NULL-värden från en lista med argument. I detta inlägg ser vi användningarna av ISNULL och COALESCE-funktionerna och deras skillnader med exempel.
COALESCE-funktionen i SQL Server
1. COALESCE-funktionen i SQL-servern används för att returnera det första Non-NULL-värdet från listan över kolumner / argument som ges i ordning.
2. COALESCE anses likna att skriva ett CASE-uttalande uttryck i SQL.
3. COALESCE är en ANSI SQL-standardfunktion. Den är tillgänglig med alla större RDBMS inklusive Oracle, MySQL.
4. Syntax - COALESCE (uttryck [, ... n])
ISNULL-funktionen i SQL Server
1. ISNULL är en funktion som införs speciellt i T-SQL för att ersätta ett NULL-värde med ett angivet ersättningsvärde.
2. Syntax - ISNULL (check_express, replacement_value)
Skillnaden mellan ISNULL och COALESCE
1. ISNULL är en funktion. Därför utvärderas det bara en gång. COALESCE är ett uttryck som liknar ett fallutlåtande. Det skulle utvärderas flera gånger.
2. ISNULL-funktionen är specifik för Microsoft och introducerades i SQL Server. COALESCE är en ANSI-standardfunktion som används av alla större RDBMS (t.ex. Oracle, MySQL).
3. Returdatatypen för en ISNULL-funktion använder datatypen för det första argumentet eller det andra argumentet om det första argumentet är NULL. Om båda argumenten är NULL, kommer den att returnera en INTEGER datatyp. COALESCE, enligt fallregleringsregler, använder högsta prioritetsprincipen för att returnera datatypen. COALESCE returnerar ett fel om alla ingångsparametrar är NULL.
4. ISNULL tar bara två parametrar. COALESCE tar ett varierande antal parametrar.
Exempel på COALESCE och ISNULL funktioner
Vi ska skapa en anställd tabell med anställnings-id, förnamn, mellannamn, efternamn, kontaktnummer och lönekolonner.
Med undantag för kolumnen Medarbetare (Id), anses alla andra kolumner NULLable.
Om OBJECT_ID ("Employee") ÄR INTE NULL DROP TABLE Employee; CREATE TABLE Anställd (Id INT NOT NULL IDENTITET (1,1) PRIMÄR KEY, Förnamn VARCHAR (50) NULL, MiddleName VARCHAR (50) NULL, LastName VARCHAR (50) NULL, KontaktNo VARCHAR (10) NULL, Lön INT NULL);
Lägg in några poster i anställd tabellen
Infoga i Medarbetarvärden ('Vishwanath', NULL, NULL, '9999955555', 12000); Infoga i Medarbetarvärden (NULL, 'Niraj', NULL, '9911223344', 14000); Infoga i Medarbetarvärden (NULL, NULL, 'Chetan', NULL, NULL); Infoga i Medarbetarvärden ('Atul', 'K', NULL, '9876780987', NULL); Infoga i Medarbetarvärden ('Vishal', 'M', 'P', NULL, 12000);
1. Använda ISNULL - Display 'Not Given' om ContactNo är NULL i anställd tabellen
Följande exempel hämtar ID och ContactNo kolumner från anställd tabellen. Om kolumn ContactNo är NULL visas ContactNo i resultatuppsättningen som "Ej given" med hjälp av ISNULL-funktionen för att testa för NULL-värden i kolumn ContactNo.
VÄLJ ID, ISNULL (ContactNo, "Not Given") FRÅN Medarbetare;
Output - Resultat Set Id ContactNo 1 9999955555 2 9911223344 3 Ej angivet 4 9876780987 5 Ej angivet
2. Använda ISNULL - Ange lön till 0, om ingen lön ges
Följande exempel hämtar ID och årslön (månadslön * 12) kolumn. Om Lön är NULL, ersätt den med 0. Använd ISNULL-funktionen för att testa NULL-värden i lönkolumnen.
SELECT ID, ISNULL (Lön, 0) * 12 som ContactNo FROM Employee;
Output - Resultat Set Id KontaktNo 1 144000 2 168000 3 0 4 0 5 144000
3. Använda IS NULL - Hitta anställda ID där Kontaktnummer är NULL
Följande exempel använder IS NULL (mellanslag mellan IS och NULL) för att filtrera bort poster i kolumnen Kontaktnummer. Om kontaktnumret inte anges betyder det att de har NULL-värden.
VÄLJ ID, KontaktNå som KontaktNå FRÅN MEDARBETARE HUR KontaktNot är NULL;
Utgång - Resultat Set Id KontaktNy 3 NULL 5 NULL
4. Använda IS NOT NULL - Hitta anställda ID-er där Lön är INTE NULL
Följande exempel använder inte NULL för att filtrera bort poster på Lönekolumn där Lön är INTE NULL-värden eller lön är närvarande.
VÄLJ ID, Lön som KontaktNå FRÅN MEDARBETARE VAR SÄLJNING ÄR INTE NULL;
Output - Resultat Set Id ContactNo 1 12000 2 14000 5 12000
5. Använda ISNULL-funktionen med AVG - Att beräkna medellönen för alla anställda
I följande exempel finns medellönen för alla anställda, inklusive de som inte har tilldelats en lönfaktor (dvs NULL-värden).
VÄLJ AVG (ISNULL (lön, 0)) FRÅN Medarbetare;
Output - Resultat Set AvgEmpSal 7600
6. Använda COALESCE - Hämta det första INTE NULL-värdet
I följande exempel används COALESCE för att returnera det första icke-NULL-värdet mellan kolumnerna för efternamn, mellannamn och efternamn.
SELECT ID, COALESCE (FirstName, MiddleName, LastName) som FirstNotNullName FROM Employee;
Output - Resultat Set Id FirstNotNullName 1 Vishwanath 2 Niraj 3 Chetan 4 Atul 5 Vishal
7. Använda COALESCE - Hämta det första INTE NULL-värdet från variabla argument
Följande exempel returnerar det första NULL NULL-värdet (dvs "Hej där").
SELECT COALESCE (NULL, NULL, "Hej där", NULL, "Hej där") som FirstNotNullValue;
Output - Resultat Set FirstNotNullValue Hej där
8. Använda COALESCE - Passerar alla NULL-värden som Argument
Om vi överför alla argument som NULL till en COALESCE-funktion, kommer det att ge upphov till ett fel som anger att minst ett argument inte borde vara null konstant.
VÄLJ KOLLEKTION (NULL, NULL, NULL, NULL) som FirstNotNullValue
Felmeddelande
Msg 4127, Level 16, State 1, Line 22
Minst ett av argumenten till COALESCE måste vara ett uttryck som inte är NULL-konstanten.
Läs mer om databas och SQL-programmering från Tech-Recipes.