我有一个FromDate字段和ToDate字段。
我正在寻找今天在“从”和“到”之间的行
select * from job
where job.type='manager'
and '2014-01-22' between job.FromDate and job.ToDate
查询不会抛出异常,甚至会返回一些行。但它不对 - 它返回的行没有我要查找的日期。
P.S。我正在使用的日期格式是我的数据库的正确格式。
答案 0 :(得分:0)
试试这个
select * from job
where job.type='manager'
and job.FromDate <= '2014-01-22' and job.ToDate >= '2014-01-22'
答案 1 :(得分:0)
比较日期通常很棘手,尤其是如果值存储为datetime
而不是date
。时间组件可以影响比较。另一种可能性是ToDate
对于最近的记录是NULL。以下是解决此问题的一种方法:
select *
from job
where job.type ='manager' and
date('2014-01-22') between date(job.FromDate) and date(coalesce(job.ToDate, '2099-12-31'))
但是,在列上使用该函数会降低查询效率。相反,您可以尝试:
select *
from job
where job.type ='manager' and
job.FromDate < '2014-01-23' and
(job.ToDate >= '2014-01-22' or job.ToDate is null);