在空白值中替换NULL或在SQL Server中替换为零

时间:2013-10-01 11:31:04

标签: sql sql-server-2008

我有一个临时表,我的列total_amount之一是整数类型而不是NULL。在查询数据时,我收到了NULL列的total_Amount值。

我是如何使用以下语法删除空值但有些仍然出现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  

我在我的其他方面面临问题。

6 个答案:

答案 0 :(得分:17)

您可以使用COALESCE函数自动将空值返回为0.语法如下所示:

SELECT COALESCE(total_amount, 0) from #Temp1

答案 1 :(得分:3)

当有多个列[和] / [或]值并且您想要第一个时,coalesce()是最佳解决方案。但是,在线查看书籍时,查询优化会将其转换为案例陈述。

MSDN摘录

COALESCE表达式是CASE表达式的语法快捷方式。

也就是说,代码COALESCE(expression1,... 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

答案 2 :(得分: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  

答案 3 :(得分:1)

在sql server中替换NULL的不同方法

使用:

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

答案 4 :(得分:1)

将空值替换为空:ISNULL('Value','')

将空值替换为0:ISNULL('Value',0)

答案 5 :(得分: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