Necesito verificar si un rango de marca de tiempo está dentro del rango de marca de tiempo de dos campos en la base de datos.

Tengo 2019-09-02 09:20:00 y 2019-09-02 09:28:00 en la base de datos.

Necesito verificar si 2019-09-02 09:22:00 y 2019-09-02 10:40:00 se encuentra entre el rango de tiempo anterior.

--- actualización ---

La siguiente es la consulta que utilicé.

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)])

Gracias por adelantado

0
Yasii 30 sep. 2019 a las 20:36

3 respuestas

La mejor respuesta

Finalmente encontré lo que esperaba

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
0
Yasii 1 oct. 2019 a las 05:51

No me queda del todo claro qué desea probar si ambas fechas están entre created_time y stopped_time o si una de ellas es.

La respuesta a continuación asume que desea probar si las fechas AMBAS están dentro del rango (started_time - stopped_time)

En realidad, hay una palabra clave BETWEEEN en SQL que encuentro realmente descriptiva. Puedes usarlo así

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

Para mejorar la legibilidad; Tenga en cuenta que BETWEEN incluye todo lo que necesita aquí.

ENTRE DOCUMENTOS

0
Nick 30 sep. 2019 a las 18:16

Puede intentar cambiar OR por AND, donde las fechas son mayores que created_time y menores que stop_time

Ejemplo:

AND ((created_time  <= %s AND created_time <= %s) AND (stopped_time >= %s AND stopped_time >= %s))
0
Juan Carlos Hdz 30 sep. 2019 a las 18:20
58172690