2016-05-21 7 views
3

Ich möchte die folgende Abfrage erreichen. Er wählt die Zeilen mit dem Fälligkeitsdatum (entries.end < 1 Stunde)Bereich in MYSQL funktioniert nicht

SET SESSION time_zone = '+8:00'; 
SELECT chatID, description 
FROM entries 
WHERE TIMESTAMPDIFF( 
SECOND , entries.end, NOW()) BETWEEN 0 AND 3601 

Doch in der Realität, es funktioniert nicht. Nicht einmal die folgende Abfrage

SET SESSION time_zone = '+8:00'; 
SELECT chatID, description 
FROM entries 
WHERE TIMESTAMPDIFF( 
SECOND , entries.end, NOW())<=3600 
AND TIMESTAMPDIFF( 
SECOND , entries.end, NOW())>=0 

Trotzdem funktioniert der folgende Code.

SET SESSION time_zone = '+8:00'; 
SELECT chatID, description 
FROM entries 
WHERE TIMESTAMPDIFF( 
SECOND , entries.end, NOW()) <=3600 

Jede Hilfe wird geschätzt. Danke euch allen hier.

bearbeiten Table structure Query

+0

Welche Datentyp ist 'entries.end' – RiggsFolly

+0

@RiggsFolly Es DATETIME- ist –

+0

Was passiert, wenn Sie den Bereich' TIMESTAMPDIFF erhöhen (SECOND, entries.end, NOW()) zwischen 0 und 3333601' – RiggsFolly

Antwort

1

Sie Ihre Spalte in einer Funktion nicht verbergen.

WHERE entries.end >= NOW() - INTERVAL 1 HOUR 
    AND entries.end <= NOW() 

ist einfach zu schreiben und zu löschen. Wenn end indexiert ist, besteht außerdem die Möglichkeit, dass der Index für eine bessere Effizienz verwendet wird.