2013-10-01 17 views
10

Ho una tabella temporanea e in quella della mia colonna total_amount è di tipo intero e NON NULL. Durante l'interrogazione dei dati, ho ricevuto i valori NULL per la colonna total_Amount.sostituire NULL con valore Vuoto o Zero nel server sql

Come mai ho usato la seguente sintassi per rimuovere i null ma alcuni come ancora i valori NULL che appaiono, correggimi se ho torto.

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

Questa è la mia interrogazione

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

Sono di fronte problema alla mia parte else.

+0

Puoi pubblicare l'intera query? Anche se sembra essere ok, sia la tua dichiarazione sulla tabella sia ciò che selezioni. –

+0

dovrebbe essere lasciato il problema di Join, per favore pubblica la tua domanda – vikas

risposta

15

È possibile utilizzare la funzione COALESCE per restituire automaticamente i valori nulli come 0. La sintassi è la seguente:

SELECT COALESCE(total_amount, 0) from #Temp1 
+0

Grazie a Shree, ha funzionato. – 0537

1

si dovrebbe sempre restituire lo stesso tipo su tutte le condizioni di caso:

Nella prima si dispone di un carattere e sulla altro che avere un int.

È possibile utilizzare:

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

o se si vuole con la soluzione:

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

ho cambiato il mio commento, deve restituire il tipo INT. – 0537

+1

Ho fornito la soluzione quando il testo era con una stringa sull'istruzione case, se vuole un int: select isnull (totalamount, 0) –

2

La coalesce() è la soluzione migliore quando ci sono più colonne [e]/[o] v alues ​​e tu vuoi il primo. Tuttavia, guardando i libri on-line, la query ottimizza la converte in un'istruzione case.

MSDN estratto

L'espressione COALESCE è una scorciatoia sintattica per l'espressione CASE.

Cioè, il codice COALESCE (espressione1, ... n) viene riscritto da Query Optimizer come la seguente espressione CASE:

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

Detto questo, perché non un semplice ISNULL()? Meno codice = soluzione migliore?

Ecco uno snippet di codice completo.

-- 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 

Ultimo ma non meno importante, come vanno le cose valori nulli in una colonna NOT NULL?

Ho dovuto modificare la definizione della tabella in modo da poter impostare il test case. Quando provo ad alterare la tabella con NOT NULL, fallisce poiché esegue un controllo di nullability.

-- this alter fails 
alter table #temp1 alter column total_amount int NOT NULL 
0

provare questo

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

O

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

Diversi modi per sostituire NULL in SQL Server

Sostituzione valore NULL utilizzando:

1. ISNULL() funzione

2. COALESCE() funzione

3. Istruzione CASE

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

Sostituisci valori Null come vuoto: ISNULL('Value','')

Sostituisci valori null come 0: ISNULL('Value',0)

Problemi correlati