检查时间戳记是否介于两列之间

时间:2019-09-30 17:36:40

标签: python mysql python-3.x

我需要检查时间戳范围是否在数据库中两个字段的时间戳范围内。

我的数据库中有2019-09-02 09:20:00和2019-09-02 09:28:00

我需要检查2019-09-02 09:22:00和2019-09-02 10:40:00是否在上述时间范围之间。

---更新---

以下是我使用的查询。

self.cursor.execute(
        "SELECT * FROM time_tracker.time_tracker_details WHERE((created_time  <= %s AND stopped_time >= %s) OR (created_time  >= %s AND stopped_time <= %s))"
        "ORDER BY created_time ASC",
        [str(created_time), str(stopped_time), str(created_time), str(stopped_time)])

预先感谢

3 个答案:

答案 0 :(得分:0)

您可以尝试为AND更改OR,其中日期大于created_time并且小于stop_time

示例:

AND ((created_time  <= %s AND created_time <= %s) AND (stopped_time >= %s AND stopped_time >= %s))

答案 1 :(得分:0)

对于我来说,要测试两个日期是否都在created_timestopped_time之间还是其中之一是不是很清楚。

以下答案假设您要测试两个日期都在(started_time-stopped_time)范围内

实际上,SQL中有一个关键字BETWEEEN,我发现它实际上是描述性的。您可以像这样使用它

..WHERE (%s BETWEEN created_time AND stopped_time) AND (%s BETWEEN created_time AND stopped_time)

提高可读性;请记住,BETWEEN是包容性的,这里您需要什么。

BETWEEN DOCS

答案 2 :(得分:0)

终于找到了我想要的东西

SELECT * FROM time_tracker.time_tracker_details WHERE parent_tt_id = '' AND user_id = %s AND 
(( %s >= created_time  AND stopped_time >= %s)) OR (created_time  >= %s AND stopped_time <= %s)
OR  ( %s >= created_time AND ( %s <= stopped_time AND stopped_time <= %s)) 
OR (( %s <= created_time  AND created_time <= %s) AND stopped_time >= %s)) 
ORDER BY tt_id ASC