注册 登录
编程论坛 SQL Server论坛

求助!关于case when 后报错问题

wuziwei6 发布于 2022-08-08 10:37, 2341 次点击
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吗,怎么解决。
5 回复
#2
mywisdom882022-08-08 15:49
那就要看你的具体数据了。
#3
wuziwei62022-08-08 16:47
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 判断的时候还要报错
#4
mywisdom882022-08-09 08:30
如果是NULL引起的,那就在WHEN这里处理掉
#5
laowan0012022-08-15 09:05
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 好像不需要加引号
#6
zxl_19982022-09-15 14:31
查询结果最好是放在视图里面,你创建一个视图看下
1