我有一张像这样的表:
Items start_datatime end_datatime
A1 2015-01-31 10:00:00 2015-02-02 20:30:00
A2 2015-02-04 16:00:00 2015-02-04 16:30:00
我想选择给定日期时间的项目(例如:2015-02-02)。
所以,我正在尝试这个查询:
SELECT Items FROM table WHERE start_datatime >= 2015-02-02 00:00:00
AND end_datatime < 2015-02-03 00:00:00
在此示例中,我想在日期为2015-01-31,2015-02-01和2015-02-02时选择项目 A1 。当日期为2015-02-04时 A2 。
答案 0 :(得分:1)
如果您想要在该日期重叠的任何记录,则逻辑为:
SELECT Items
FROM table
WHERE start_datatime <= '2015-02-03 00:00:00' AND
end_datatime >= '2015-02-02 00:00:00';
如果您想要完全重叠,那么整个期间都包含当天:
SELECT Items
FROM table
WHERE start_datatime <= '2015-02-02 00:00:00' AND
end_datatime >= '2015-02-03 00:00:00';
而且,如果你只关心一天开始时的午夜:
SELECT Items
FROM table
WHERE start_datatime <= '2015-02-02 00:00:00' AND
end_datatime >= '2015-02-02 00:00:00';
答案 1 :(得分:0)
删除第二个WHERE,它应该可以工作:
SELECT Items FROM table WHERE start_datatime >= 2015-02-02 00:00:00 AND end_datatime <= 2015-02-02 00:00:00
要改进它,我会将end_datatime <= 2015-02-02 00:00:00
更改为end_datatime < 2015-02-02 00:00:00
,因为您的解决方案会包含所有在第二天结束的商品。
还要考虑在当天之前开始并在之后结束的项目。他们应该被排除吗?在您的解决方案中,这将会发生。