2010-12-17 16 views
0

Ich habe eine Tabelle mit folgenden SpaltenNehmen bestimmte Bedingung auf bestimmte Zeilen in SQL-Anweisung

(name: varchar), (mydate: DATE), (endtime: TIME)

Ich versuche zu bekommen bestimmte Zeilen basierend auf den folgenden Bedingungen:

  1. mydate innerhalb eines bestimmten Bereichs ist
  2. mydate> Datum (NOW())
  3. endTime> Zeit (NOW()), sollte diese gelten nur für "Heute" Datumszeilen

Das Problem ist mit EndTime. Betrachten wir zum Beispiel die folgenden Daten

  1. Äpfel 2011-02-01 21.00.00
  2. Orange 2011-03-02 10.00.00
  3. Trauben 2011-05-10 11.00 : 00

Wenn die Eingänge auf die Abfrage sind

  1. Bereich: 2011-01-01 bis 2011-04-01
  2. Datum (NOW()): 2011 -01-01
  3. Zeit (NOW()): 20:00:00

Betrachten Sie die Abfrage

SELECT name FROM mytable 
WHERE mydate BETWEEN '2011-01-01' AND '2011-04-01' 
AND date >= DATE(NOW()) 
AND endTime > TIME(NOW()) 

Die einzigen Abfrage-Ergebnisse 'Äpfel'. Aber das richtige Ergebnis ist "Äpfel" und "Orange". Das Problem ist Bedingung: endTime> Zeit (NOW()), dies sollte nur für "heutige" Datumszeilen gelten.

Ich möchte nicht UNION, wie meine ursprüngliche Abfrage ist groß. Gibt es eine Möglichkeit, die Bedingung nur auf bestimmte Zeilen anzuwenden.

Irgendwelche Ideen werden geschätzt. Danke.

Antwort

1

Verwendung:

SELECT name 
    FROM mytable 
WHERE mydate BETWEEN '2011-01-01' AND '2011-04-01' 
    AND ADDTIME(mydate, endtime) > NOW() 

Die ADDTIME function können Sie die Datums- und Uhrzeitwert (e) in einem einzigen DATETIME- kombinieren, die Sie dann gegen NOW()/CURRENT_TIMESTAMP verwenden können.

Ehrlich gesagt, das zusätzliche Kriterium ist redundant ...

+0

Danke OMG Ponys. – metalhawk

1

Versuchen Sie es so zu machen, dass es nur endTime überprüft, falls das Datum auf der Grenze ist.

SELECT name FROM mytable 
WHERE mydate BETWEEN '2011-01-01' AND '2011-04-01' 
AND (date > DATE(NOW()) 
OR (date = DATE(NOW()) AND endTime > TIME(NOW()))) 
+0

Vielen Dank mdarwi für die Lösung. Es passt genau zum Zustand. :) – metalhawk

Verwandte Themen