添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

在sql server中用空白值或零替换NULL

11 人关注

我有一个临时表,其中一列 total_amount 是整数类型,而不是 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  

我在其他部分面临问题。

2 个评论
你能公布整个查询吗?虽然它看起来不错,但你的表的声明和你选择的内容都很好。
应该是Left Join的问题,请发表你的询问。
sql
sql-server-2008
0537
0537
发布于 2013-10-01
6 个回答
shree.pat18
shree.pat18
发布于 2017-05-03
已采纳
0 人赞同

你可以使用COALESCE函数来自动将空值返回为0。 语法如下所示。

SELECT COALESCE(total_amount, 0) from #Temp1
    
CRAFTY DBA
CRAFTY DBA
发布于 2017-05-03
0 人赞同

当有多列[和]/[或]值时,coalesce()是最好的解决方案,你想得到第一个。 然而,在网上看书,查询优化将其转换为case语句。

MSDN摘录

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

也就是说,代码COALESCE(expression1,...n)被查询优化器改写为以下CASE表达式。

WHEN (expression1 IS NOT NULL ) THEN expression1 WHEN (expression2 IS NOT NULL ) THEN expression2 ELSE expressionN

既然如此,为什么不采用简单的ISNULL()呢? 更少的代码=更好的解决方案?

下面是一个完整的代码片段。

-- drop the test table
drop table #temp1
-- create test table
create table #temp1
    issue varchar(100) NOT NULL,
    total_amount int NULL
-- create test data
insert into #temp1 values
    ('No nulls here', 12),
    ('I am a null', NULL);
-- 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
    
Gatej Alexandru
Gatej Alexandru
发布于 2017-05-03
0 人赞同

在所有的情况下,你应该总是返回相同的类型。

在第一种情况下,你有一个字符,在其他情况下你有一个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  
    
0537
我已经修改了我的评论,它必须返回INT类型。
我提供的解决方案是,当文本在case语句中带有字符串时,如果他想要一个int: select isnull(totalamount,0)
Narashi Hadiya
Narashi Hadiya
发布于 2017-05-03
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
    
Rae Lee
Rae Lee
发布于 2017-05-03
0 人赞同

在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