2017-12-10 1 views
0

Ich habe Spalten:So wählen Sie Datensätze mit Minutenintervallbereich des aktuellen Tages und der aktuellen Uhrzeit aus?

date = "2017.12.10" (type = Datum)

time = "14.10.00" (type = Zeit)

Dauer = „40 "(typ = varchar 100)

Zum Beispiel ist heute Datum" 2017-12-10 "und heute ist Zeit" 14:30 ". Wie kann ich Aufzeichnungen nur für die aktuelle Zeit und nur im Zeitintervall "40 Minuten" erhalten? Der akzeptierte Zeitraum wäre also "14: 10: 00-14: 50: 00".

Ich habe so etwas wie dies versucht:

SELECT date, time, duration FROM events WHERE date = CURDATE() AND time >= CURTIME(); 

Aber es innerhalb von 40 Minuten Intervall sucht nicht.

Vielen Dank.

+0

Shop Datum und Zeit als eine einzige Einheit – Strawberry

Antwort

1

das?

SELECT date, time, duration FROM events WHERE date = CURDATE() AND time between date_add(CURTIME(), interval -duration minutes) and CURTIME(); 
+0

Können Sie mir sagen, wie kann ich diese Logik machen „date_add (CURTIME(), Intervall - Dauer - 20 Minuten) "? Zum Beispiel wenn ich 20 Minuten mehr möchte. – kostya572

1

Ich dachte, Ihr Problem zu +/- Bedarf erforderlich (Dauer/2)

select 
     date_sub(CONCAT(dt, " ", tim), interval (cast(duration as unsigned)/2) minute) st 
    , date_add(CONCAT(dt, " ", tim), interval (cast(duration as unsigned)/2) minute) fin 
    , d.* 
from (
    select curdate() as dt, cast('14:10:00' as time) as tim, '40' as duration union all 
    select curdate() as dt, cast('14:10:00' as time) as tim, '60' as duration union all 
    select curdate() as dt, cast('14:10:00' as time) as tim, '90' as duration 
    ) d 
where 
    CONCAT(dt, " ", tim) between date_sub(CONCAT(dt, " ", tim), interval (cast(duration as unsigned)/2) minute) 
          and date_add(CONCAT(dt, " ", tim), interval (cast(duration as unsigned)/2) minute) 
+0

überarbeitete die Abfrage, so dass Sie den Ansatz sowohl als Auswahl als auch als where-Klausel Prädikaten sehen –

Verwandte Themen