在sql日期范围内使用时无法获取记录
问题描述:
当我在SQL中使用以下查询时,没有记录返回。在sql日期范围内使用时无法获取记录
select distinct e.No from attendance a
inner join Employee e on a.EmployeeId =e.No
where e.No not in (select EmployeeId from attendance where AttendanceDate between '2017-05-26 00:00:00' and '2017-06-06 00:00:00')
但是,当我单日期而不是日期范围,它工作正常。例如
select distinct e.No from attendance a
inner join Employee e on a.EmployeeId =e.No
where e.No not in (select EmployeeId from attendance where AttendanceDate = '2017-06-06 00:00:00')
有人可以帮我解决这个问题,因为我必须使用日期范围,而不是特定的日期。
答
如果您在where语句中运行select,您会得到任何结果吗?
尝试没有它的时候:
between '2017-05-26' and '2017-06-06'
什么日期格式,您使用的?
+0
是的,它返回记录。并在2017-05-26 00:00:00格式 – ASK
答
我想你混淆了有关查询的逻辑:
select distinct e.No
from attendance a
inner join Employee e
on a.EmployeeId = e.No
where e.No not in
(
select EmployeeId from attendance
where AttendanceDate between '2017-05-26 00:00:00' and '2017-06-06 00:00:00'
)
如果子查询是返回在Employee
表中的每个员工号,那么你还是会回到从没有记录查询。这就是WHERE NOT IN (...)
的行为。我的猜测是单日期查询似乎是“正常工作”的原因是没有员工记录与该日期匹配,因此您的结果集不是空的。
如果您预期的是相反的行为,那么也许您应该将WHERE e.No NOT IN
更改为WHERE e.No IN
。
您确定应该返回该日期范围内的数据吗? –
是的,因为它会在单独的日期返回记录 – ASK
您是否尝试过'2017-05-26'和'2017-06-06'之间? –