我有一个FromDate字段和一个ToDate字段。SQL - 查找日期是否在两个日期之间
我找行今天是“从”和“到”
select * from job
where job.type='manager'
and '2014-01-22' between job.FromDate and job.ToDate
查询不抛出异常之间,它甚至返回一些行。但它不对 - 它返回的行没有我正在寻找的日期。
P.S.我使用的日期格式对我的数据库是正确的。
我有一个FromDate字段和一个ToDate字段。SQL - 查找日期是否在两个日期之间
我找行今天是“从”和“到”
select * from job
where job.type='manager'
and '2014-01-22' between job.FromDate and job.ToDate
查询不抛出异常之间,它甚至返回一些行。但它不对 - 它返回的行没有我正在寻找的日期。
P.S.我使用的日期格式对我的数据库是正确的。
试试这个
select * from job
where job.type='manager'
and job.FromDate <= '2014-01-22' and job.ToDate >= '2014-01-22'
谢谢,但那也行不通。有趣的是,它返回与我的查询相同的列表。这是错误的答案。 – user3197745
比较日期往往是棘手的,特别是当值存储为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);
好的抱歉,你的麻烦家伙。我做错了什么。 – user3197745
考虑为上述和/或sqlfiddle提供正确的DDL(SHOW CREATE TABLE语句和INSERTS)。 – Strawberry
请显示示例数据,所需结果以及您实际获得的内容。 –
如何验证结果不正确? –