标题:求助!关于case when 后报错问题
只看楼主
wuziwei6
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2022-8-8
结帖率:0
已结贴  问题点数:20 回复次数:5 
求助!关于case when 后报错问题
select case when datediff(minute, 时间,convert(varchar(max),getdate()-1,111))/1440.00 >=16 then '超期'
else '未超期' end as '是否超期'
from table
where  时间  !='null'

上面这段执行没问题,但是我我再筛选出超期就报错了,从字符串转换日期和/或时间时,转换失败。

select 是否超期
from(
select case when  datediff(minute, 时间,convert(varchar(max),getdate()-1,111))/1440.00 >=16 then '超期'
else '未超期' end as '是否超期'
from table
where  时间  !='null')a
where 是否超期='超期'

请各位大哥帮忙看看是什么问题,是因为时间里面有null吗,怎么解决。
搜索更多相关主题的帖子: case where 时间 报错 是否 
2022-08-08 10:37
mywisdom88
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
得分:10 
那就要看你的具体数据了。
2022-08-08 15:49
wuziwei6
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2022-8-8
得分:0 
select 是否超期
from(
select when 时间 ='null' then ''
when  datediff(minute, 时间,convert(varchar(max),getdate()-1,111))/1440.00 >=16 then '超期'
else '未超期' end as '是否超期'
from table
where  时间  !='null')a
where 是否超期='超期'

我在第一个case when 加了个判断,时间是null 的为空值,下面就不会报错了。我不理解的是不是where 那里已经筛选出<>null吗,为什么case when 判断的时候还要报错
2022-08-08 16:47
mywisdom88
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
得分:0 
如果是NULL引起的,那就在WHEN这里处理掉
2022-08-09 08:30
laowan001
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:54
帖 子:802
专家分:1914
注 册:2015-12-30
得分:10 
select case when datediff(minute, 时间,convert(varchar(max),getdate()-1,111))/1440.00 >=16 then '超期'
else '未超期' end as '是否超期'
INTO #tmptable from table
where  时间  !='null'

select 是否超期 from #tmptable where 是否超期='超期'

把查询结果先放到临时表里,然后再做查询,这只是个人习惯,供参考
另:where 条件中判断为空的 null 好像不需要加引号
2022-08-15 09:05
zxl_1998
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2022-9-15
得分:0 
查询结果最好是放在视图里面,你创建一个视图看下
2022-09-15 14:31



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-509736-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.052088 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved