可以使用nullif()函数,e.g.use tempdb go if object_id('#') is not null drop table # create table #(id int) insert into #(id)values(1),(0),(0),(2) select nullif(id,0) as id from # -------------------------------------- 1 NULL NULL 2
好像case when还比较简单一点
比较 NULLIF 和 CASE 若要显示 NULLIF 和 CASE 之间的相似性,则以下查询将计算 MakeFlag 和 FinishedGoodsFlag 列中的值是否相同。第一个查询使用 NULLIF。第二个查询使用 CASE 语句。 USE AdventureWorks; GOSELECT ProductID, MakeFlag, FinishedGoodsFlag, NULLIF(MakeFlag,FinishedGoodsFlag)AS 'Null if Equal' FROM Production.Product WHERE ProductID < 10; GOSELECT ProductID, MakeFlag, FinishedGoodsFlag,'Null if Equal' = CASE WHEN MakeFlag = FinishedGoodsFlag THEN NULL ELSE MakeFlag END FROM Production.Product WHERE ProductID < 10; GO
--用unllif(列名,需要转换的值) --例如: if object_id('b','u')is not null drop table b create table b ( id tinyint ) insert into b values(0),(1),(0),(3)select * from b select nullif(id,0) from b
select NULLIF ( col_name, 0) from tab_name 跟NULL有关的函数:ISNULL,NULLIF,COALESCE
例如将表用left join自连接,b表where col>0,然后输出b表的col列
go
if object_id('#') is not null drop table #
create table #(id int)
insert into #(id)values(1),(0),(0),(2)
select nullif(id,0) as id from #
--------------------------------------
1
NULL
NULL
2
若要显示 NULLIF 和 CASE 之间的相似性,则以下查询将计算 MakeFlag 和 FinishedGoodsFlag 列中的值是否相同。第一个查询使用 NULLIF。第二个查询使用 CASE 语句。
USE AdventureWorks;
GOSELECT ProductID, MakeFlag, FinishedGoodsFlag,
NULLIF(MakeFlag,FinishedGoodsFlag)AS 'Null if Equal'
FROM Production.Product
WHERE ProductID < 10;
GOSELECT ProductID, MakeFlag, FinishedGoodsFlag,'Null if Equal' =
CASE
WHEN MakeFlag = FinishedGoodsFlag THEN NULL
ELSE MakeFlag
END
FROM Production.Product
WHERE ProductID < 10;
GO
--例如:
if object_id('b','u')is not null
drop table b
create table b
(
id tinyint
)
insert into b values(0),(1),(0),(3)select * from b
select nullif(id,0) from b
跟NULL有关的函数:ISNULL,NULLIF,COALESCE