繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM