2017-06-22 2 views
3

Hier ist mein Tisch zu bekommen: shift_masterWie aktuelle Verschiebung um aktuelle Zeit von Mysql Datenbank

shift(varchar)  | start_time(varchar) | end_time(varchar)  
Morning   | 06:00 AM   | 02:00 PM  
AfterNoon   | 02:00 PM   | 10:00 PM  
Evening   | 10:00 PM   | 06:00 AM 

Ich brauche eine Abfrage, in der ich die aktuelle Zeit vergehen wird, und es wird die Aufzeichnung der Verschiebung geben die läuft gerade weiter.

Ich schätze Ihre Hilfe sehr.

+0

Dank @Giorgos Betsos –

+0

Zeitwerte speichern als 'varchar' nicht so eine gute Idee ist. Es würde die Dinge viel einfacher machen, stattdessen den nativen TIME-Datentyp von MySQL zu verwenden. –

+0

Es stellt sich heraus, dass das Schlimmste an der Art, wie die Schichten dargestellt werden, die Tatsache ist, dass "Evening" mehrere Tage umfasst. Meiner Meinung nach wäre es viel einfacher, das gewünschte Ergebnis zu erzielen, wenn Sie die 'Evening'-Schicht * in zwei separaten Aufzeichnungen *, dh' 22.00 Uhr - 12.00 Uhr 'und '00:00 Uhr - 06:00 Uhr, gebrochen hätten AM'. –

Antwort

0

Zuerst ändern Datentyp für START_TIME und end_time zu und Zeit in seinem Format eingeben und dann

SELECT shift FROM shift_master WHERE start_time <= NOW() AND end_time > NOW(); 

Es ist schwierig, die Zeit als varchar mit CURRENT_TIME gespeichert zu vergleichen. Wenn möglich, dann wie oben beschrieben, wird es Ihre Arbeit vereinfachen.

+0

Sorry @Vrajesh Doshi, unsere Anforderung ist es, in "H: I A" Format zu speichern. Im Zeitstempel kann ich also keine Daten in diesem Format speichern. –

0

Versuch zu verwenden, um dies

SELECT shift FROM shift_master WHERE TIME(NOW()) BETWEEN TIME(STR_TO_DATE(start_time,'%h:%i %p')) AND TIME(STR_TO_DATE(end_time,'%h:%i %p')) 
+0

Danke für die Antwort. Es ist wahr, wenn die aktuelle Zeit weniger als 22:00:00 ist. Aber meine aktuelle Zeit ist 23:00:00, dann sollte das Ergebnis "Abend" sein. Aber in Ihrer Anfrage habe ich nichts bekommen. –

0

Diese Abfrage

set @now_time = UNIX_TIMESTAMP(now()) % 86400; 

SELECT shift 
FROM (SELECT shift, UNIX_TIMESTAMP(STR_TO_DATE(start_time,'%h:%i %p')) % 86400 as start, UNIX_TIMESTAMP(STR_TO_DATE(end_time,'%h:%i %p')) % 86400 as end 
FROM shift_master) M 
WHERE (start < end AND @now_time BETWEEN start AND end - 1) OR 
(start > end AND (@now_time > start or @now_time < end)) 
+0

Tut mir leid, es funktioniert nicht yaar –

+0

@PHPDev was ist die Ausgabe dieser Abfrage für Sie? – MahdiY

+0

Ich habe keine Datensätze, also Tabellenstruktur wird angezeigt. –