[英]replace NULL with Blank value or Zero in sql server
我有一个临时表,我的列total_amount
是整数类型total_amount
NULL
。 在查询数据时,我收到了total_Amount
列的NULL
值。
我怎么用下面的语法来删除空值但是仍然有一些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
我在我的其他方面面临问题。
您可以使用COALESCE函数自动将空值返回为0.语法如下所示:
SELECT COALESCE(total_amount, 0) from #Temp1
当存在多个列[和] / [或]值并且您想要第一个时,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
在所有情况下,您应始终返回相同的类型:
在第一个中你有一个角色,而在另一个你有一个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
在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
将空值替换为空: ISNULL('Value','')
将Null值替换为0: ISNULL('Value',0)
试试这个
SELECT Title from #Movies
SELECT CASE WHEN Title = '' THEN 'No Title' ELSE Title END AS Titile from #Movies
要么
SELECT [Id], [CategoryId], ISNULL(nullif(Title,''),'No data') as Title, [Director], [DateReleased] FROM #Movies
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.