sqlserver 关于 case when is null 的查询

sqlserver 关于 case when is null 的查询

select * from ApInterSkuInfo 
where 
BeginValue=convert(varchar(100),convert(datetime,'2017-12-09 23:59:59.8',101),23)
----更新时间为null时按照新建时间排序,否则按照更新时间排序
order by (case UpdateDate when null then CreateDate else UpdateDate end) asc

=====================================================

--这样的情况会出现null值
select 
(case UpdateTime when null 
then InsertTime   end) 
from WxUsers 
where UserID='5537821'

--加上else就不会出现null值
select 
(case UpdateTime when null 
then InsertTime else InsertTime  end) 
from WxUsers 
where UserID='5537821'

 

=====================================================

SourceID=''
select 
ISNULL(SourceID,InsertTime) 
from WxUsers 
where UserID='5537821'
--查询结果也是'',因为ISNULL函数不会判断''值

 

=====================================================

关于 ISNULL COALESCE

--SQL Server ISNULL函数和Coalesce函数替换空值的区别
SELECT COALESCE('',0)    --结果0
SELECT COALESCE('    ',0)  --结果0
SELECT COALESCE(null,0)   --结果0
SELECT COALESCE(123,0)       --结果123

SELECT ISNULL('',0)        --结果''
SELECT ISNULL('  ',0)      --结果''   
SELECT ISNULL(null,0)      --结果0
SELECT ISNULL(123,0)       --结果123
--由结果结果可以看出COALESCE函数对于空值处理和NULL值都起作用。

 

=====================================================

关于空值的查询

--没有'',也没有'  ',
select * from BankPayUserFlow order by CreateDate desc --249行(只有两种情况:有内容,NULL)
select * from BankPayUserFlow where SuccessTranID is null  --237行
select * from BankPayUserFlow where SuccessTranID is not  null --12行
select * from BankPayUserFlow where SuccessTranID =''  --0行
select * from BankPayUserFlow where SuccessTranID <>'' --12行 这行情况是特殊的,自动排除了NULL
select * from BankPayUserFlow where SuccessTranID is not null or SuccessTranID<>'' --12行

--有一行是'',
select * from BankPayUserFlow order by CreateDate desc --249行(只有三种情况:有内容,NULL,'')
select * from BankPayUserFlow where SuccessTranID is null  --236行
select * from BankPayUserFlow where SuccessTranID is not null --13行
select * from BankPayUserFlow where SuccessTranID =''  --1行
select * from BankPayUserFlow where SuccessTranID <>'' --12行 这行情况是特殊的,自动排除了NULL
select * from BankPayUserFlow where SuccessTranID is not null or SuccessTranID<>'' --13行

--有一行是'',有一行是'  ',
select * from BankPayUserFlow order by CreateDate desc --249行(只有四种情况:有内容,NULL,'','  ')
select * from BankPayUserFlow where SuccessTranID is null  --235行
select * from BankPayUserFlow where SuccessTranID is not null --14行
select * from BankPayUserFlow where SuccessTranID =''  --2行
select * from BankPayUserFlow where SuccessTranID <>'' --12行 这行情况是特殊的,自动排除了NULL
select * from BankPayUserFlow where SuccessTranID is not null or SuccessTranID<>'' --14行

 

posted on 2022-10-31 17:00  Jankie1122  阅读(364)  评论(0编辑  收藏  举报