我有ItemsRent
表,
ID | ParentID | SubID | StartDate | EndDate |
--------------------------------------------------------------------
1 | 100 | 102 | 2014-09-09 17:40:00 | 2014-11-09 17:40:00 |
2 | 70 | 73 | 2014-08-09 14:20:00 | 2014-12-09 13:40:00 |
日期是sql格式。
我的输入日期是:
InputStartDate: 2014-09-09 18:00:00
InputEndDate: 2014-10-09 13:47:00
我想要返回两个日期之间的日期最佳行。例如:
Lets call StartDate as S, and EndDate as E.
And input dates will be InputStartDate as IS, and InputEndDate as IE.
S E
|----------------|
IS IE
|XXXXXXX--------|
有什么建议吗?
答案 0 :(得分:1)
通常情况下,我会说使用BETWEEN运算符,但由于您在表中存储了开始日期和结束日期,因此这将变得比它需要的更复杂。如果您假设存储的开始日期在结束日期之前,则只需执行两次检查。
SELECT * FROM `itemsRent` WHERE `StartDate` > 1410285600 AND `EndDate` < 1410356820
这将验证项目的开始日期是在指定的开始日期之后发生的。这个问题是它不会检查它是否发生在结束日期之前。您可以通过检查项目的结束日期是否在指定的结束日期之前进行,而不是明确地编写此检查。
注意:如果在结束日期之前没有开始日期,可能会导致问题。如果这是可能的,那么您将需要明确地编写这些检查。这将是使用BETWEEN操作的好例子。
答案 1 :(得分:1)
为什么不将表格中的最大结束日期作为高日期?
SELECT *
FROM itemsRent
WHERE (InputStartDate BETWEEN startdate AND end date)
AND (InputEndDate BETWEEN startdate AND enddate);
答案 2 :(得分:1)
此查询将生成与您的插图相匹配的结果。它将查找在InputStartDate
和InputEndDate
之间花费任何时间的所有行,并输出由InputStartDate
和InputEndDate
限制的修改日期范围。
SELECT ID, ParentId, SubId,
MAX( InputStartDate, StartDate ) AS Date_Start,
MIN( InputEndDate, EndDate ) AS Date_End
FROM `itemsRent`
WHERE InputStartDate <= EndDate AND InputEndDate >= StartDate
答案 3 :(得分:0)
您的查询目前正在查找EndDate
早于 的行,而不是您提供的StartDate
或 提供的EndDate
之后的行。我不认为这就是你想要的。
如果您希望StartDate和EndDate都在您提供的日期之间(我们称之为your-start-date
和your-end-date
),您的查询应该是这样的:
SELECT * FROM `itemsRent` WHERE `StartDate` > your-start-date AND `StartDate` < your-end-date AND `EndDate` > your-start-date AND `EndDate` < your-send-date