webentwicklung-frage-antwort-db.com.de

ersetzen Sie NULL durch Leerwert oder Null in SQL Server

Ich habe eine temporäre Tabelle, in der eine meiner Spalte total_amount vom Integer-Typ ist und NICHT NULL. Bei der Abfrage von Daten erhielt ich NULL-Werte für die total_Amount-Spalte. 

Wie auch immer ich die folgende Syntax verwendet habe, um Nullen zu entfernen, aber einige, wie immer noch NULL-Werte erscheinen, korrigieren Sie mich, wenn ich falsch liege.

Create table #Temp1
(
    issue varchar(100) NOT NULL,
    total_amount int NOT NULL
) 

Dies ist meine Anfrage 

Case when total_amount = 0 then 0  
else isnull(total_amount, 0)  
end as total_amount  

Ich habe ein Problem in meinem anderen Teil. 

10
0537

Sie können die COALESCE-Funktion verwenden, um Nullwerte automatisch als 0 zurückzugeben. Die Syntax lautet wie folgt:

SELECT COALESCE(total_amount, 0) from #Temp1
17
shree.pat18

Das coalesce () ist die beste Lösung, wenn mehrere Spaltenwerte [und]/[oder] vorhanden sind und Sie den ersten Wert wünschen. Bei der Online-Suche von Büchern wird die Abfrageoptimierung jedoch in eine Case-Anweisung umgewandelt.

MSDN-Auszug

Der COALESCE-Ausdruck ist eine syntaktische Verknüpfung für den CASE-Ausdruck. 

Das heißt, der Code COALESCE (expression1, ... n) wird vom Abfrageoptimierer als der folgende CASE-Ausdruck umgeschrieben:

CASE
   WHEN (expression1 IS NOT NULL) THEN expression1
   WHEN (expression2 IS NOT NULL) THEN expression2
   ...
   ELSE expressionN
END

Mit dem gesagt, warum nicht eine einfache ISNULL ()? Weniger Code = bessere Lösung?

Hier ist ein vollständiger Code-Ausschnitt.

-- drop the test table
drop table #temp1
go

-- create test table
create table #temp1
(
    issue varchar(100) NOT NULL,
    total_amount int NULL
); 
go

-- create test data
insert into #temp1 values
    ('No nulls here', 12),
    ('I am a null', NULL);
go

-- isnull works fine
select
    isnull(total_amount, 0) as total_amount  
from #temp1

Nicht zuletzt erhalten Sie NULL-Werte in eine NOT NULL-Spalte.  

Ich musste die Tabellendefinition ändern, um den Testfall einrichten zu können. Wenn ich versuche, die Tabelle in NOT NULL zu ändern, schlägt dies fehl, da eine Nullfähigkeitsprüfung durchgeführt wird.

-- this alter fails
alter table #temp1 alter column total_amount int NOT NULL
3
CRAFTY DBA

Nullwerte als leer ersetzen: ISNULL('Value','')

Ersetzen Sie Nullwerte als 0: ISNULL('Value',0)

1

Verschiedene Möglichkeiten, NULL in SQL Server zu ersetzen

Ersetzen des NULL-Werts mit:

1. ISNULL () - Funktion

2. COALESCE () - Funktion

3. CASE-Erklärung

SELECT Name as EmployeeName, ISNULL(Bonus,0) as EmployeeBonus from tblEmployee

SELECT Name as EmployeeName, COALESCE(Bonus, 0) as EmployeeBonus 
FROM tblEmployee

SELECT Name as EmployeeName, CASE WHEN Bonus IS NULL THEN 0 
ELSE Bonus  END as EmployeeBonus 
FROM  tblEmployee
1
Rae Lee

Sie sollten immer unter allen Bedingungen denselben Typ zurückgeben:

In der ersten hast du einen Charakter und auf der anderen hast du einen Int.

Sie können verwenden:

Select convert(varchar(11),isnull(totalamount,0))

oder wenn Sie mit Ihrer Lösung wollen: 

Case when total_amount = 0 then '0'   
else convert(varchar(11),isnull(total_amount, 0))  
end as total_amount  
1
Gatej Alexandru

Versuche dies

SELECT Title  from #Movies
    SELECT CASE WHEN Title = '' THEN 'No Title' ELSE Title END AS Titile from #Movies

ODER 

SELECT [Id], [CategoryId], ISNULL(nullif(Title,''),'No data') as Title, [Director], [DateReleased] FROM #Movies
0
Narashi Hadiya