2012-04-03 13 views
1

Ich brauche eine SQL-Bedingung, um Zeilen aus einer Tabelle zu erhalten, die zwischen 6:00 Uhr gestern und 7:00 Uhr heute erstellt wurden. Die Tabelle hat ein Feld creationDate.SQL, um alle Datensätze von gestern zu bekommen.

Dies ist der Ansatz, den ich von

select * 
from myTable 
where creationDate = DATE_SUB(CONCAT(CURDATE()), INTERVAL 1 DAY) 

Ich verwende MySQL-Server 5. Auch meine Zeit ist nicht auf dem creation Feld dachte, es ist an einem separaten Feld namens Startzeit.

+6

uns bitte sagen, welche Datenbank Sie verwenden. –

+0

Ich habe etwas wie folgt versucht: creationDate = DATE_SUB (CONCAT (CURDATE(), \ '00: 00: 00 \'), INTERVALL 1 TAG) – richardalberto

+0

Ich benutze mysql server 5 – richardalberto

Antwort

5

getestet und es funktioniert (dies setzt voraus, dass Ihre creation Spalte vom Typ Zeitstempel):

select * from mytable 
where 
creationDate between concat(date(date_sub(now(), interval 1 day)), ' 06:00:00') and concat(date(now()), ' 07:00:00') 

Beachten Sie die Leerzeichen vor dem Zeitwert, dh '06:00:00'

EDIT Ursache für weitere Spezifikation in Kommentar:

SELECT * FROM mytable 
WHERE 
(creationDate >= date(date_sub(now(), interval 1 day)) AND creationTime >= '06:00:00') 
AND 
(creationDate <= date(now()) AND creationTime <= '07:00:00') 

Ja, muss es dies ungeschickt jetzt sein, denn wenn man einfach so etwas wie (Pseudo-Code) schreiben würde

...WHERE creationDate between today and yesterday AND creationTime between '06:00:00' and '07:00:00' 

Sie würde den Zeitraum von 1 Stunde für heute und gestern erhalten.

+0

okay, das sieht gut aus und ich denke, es könnte funktionieren, aber ich habe mein Zeitfeld in einem separaten Feld namens startTime ... könnten Sie Ihre Antwort ändern, um sich daran anzupassen? danke ... – richardalberto

+0

das hat funktioniert :) danke :) – richardalberto

0

versuchen, dies zu tun:

select * 
from myTable 
where creationDate > DATE_SUB(CURDATE(), INTERVAL 25 HOUR); 
+0

das würde den ganzen Tag zurückgeben ... wie ich in meiner Frage angegeben habe brauche ich von 6:00 Uhr gestern bis 7:00 Uhr heute – richardalberto

+0

ich denke, das Problem hier ist, dass dies eine Tabelle ist, die Datensätze alle generiert Minute. Wenn ich nicht 6:00 Uhr als Startpunkt definiere, würde ich Datensätze zurückgeben, die ich für diesen Bericht nicht benötige. Danke für die Hilfe. – richardalberto

+0

@ RichardGonzálezAlberto so auf Stundenintervall arbeiten, ist meine Bearbeitung hilft Ihnen? –

0

Diese Abfrage

select * 
from myTable 
where creationDate >= 
DATE_SUB(concat(DATE_FORMAT(NOW(), %Y-%m-%d), ' 07:00:00'), INTERVAL 25 HOUR) 
AND 
creationDate <= concat(DATE_FORMAT(NOW(), %Y-%m-%d), ' 07:00:00') 
+0

danke ... was wenn ich meine zeit in einem separaten feld namens startzeit habe? – richardalberto

+0

Was möchten Sie creationDate ersetzen oder anstelle von NOW() wollen Sie StartDate? Wenn du startDate anstelle von NOW() willst, ersetze es in der obigen Abfrage mit startDate. –

Verwandte Themen