2013-10-01 294 views
10

我有一個臨時表,並在我的專欄total_amount的,一個是整數類型,而不是NULL。查詢數據時,我收到NULLtotal_Amount列。替換空值或零NULL在SQL Server

如何以往我用下面的語法來去除空,但一些如何仍然NULL值的出現,糾正我,如果我錯了。

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

這是我的查詢

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

我面臨的問題,在我的其他部分。

+0

你可以發佈整個查詢嗎?雖然它看起來沒問題,但是你的表格聲明和你選擇的都是。 –

+0

應該是左連接問題,請發佈您的查詢 – vikas

回答

15

可以使用COALESCE函數自動返回爲0。如下圖所示語法空值:

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

謝謝Shree,它的工作。 – 0537

1

你應該總是返回相同類型的所有情況下條件:

在你有一個字符的第一個和在其他你有一個int。

您可以使用:

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

,或者如果你想與您的解決方案:

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

我改變了我的評論,它必須返回INT類型。 – 0537

+1

我提供瞭解決方案時,文本是與case語句的字符串,如果他想int: select isnull(totalamount,0) –

2

當存在多列[和]/[或] v時,coalesce()是最佳解決方案線索,你想要第一個。但是,在線查看書籍時,查詢優化會將其轉換爲案例聲明。

MSDN摘錄

coalesce表達式爲CASE表達式句法快捷方式。

也就是說,代碼COALESCE(表達式,... n)通過查詢優化器爲以下CASE表達式改寫:

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

雖這麼說,爲什麼不是簡單的ISNULL()?代碼少=更好的解決方案?

下面是一個完整的代碼片段。

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

最後但並非最不重要的,你是如何讓空值成NOT NULL列?

我不得不改變表的定義,這樣我可以建立測試用例。當我嘗試將表更改爲NOT NULL時,它會失敗,因爲它會進行空性檢查。

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

嘗試這個

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

OR

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

不同的方法來代替NULL在SQL Server

更換NULL值使用:

1. ISNULL()函數

2. COALESCE()函數

3. 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
作爲

空替換空值:ISNULL('Value','')

將空值替換爲0:ISNULL('Value',0)