2010-12-13 18 views
-2
SELECT * FROM shortleavedetails WHERE employee_code='17' AND 
(DATE(authorizeddate) <= DATE(2011-1-1) AND DATE(authorizeddate) >= DATE(2010-5-1)) 
+2

, was Ihre Frage ist? – Lee

+0

Datum wird nicht verglichen. – Aamir

Antwort

1
SELECT * FROM shortleavedetails WHERE employee_code='17' AND authorizeddate between '2010-5-1'and '2011-1-1' 
+0

Es ist besser, auf DATE wie hier [hier] zu übertragen (http://stackoverflow.com/questions/4897133/mysql-select-date-range-issue/4897195#4897195). –

2

Setzen Sie Ihre Datumswerte in einfache Anführungszeichen, da sie Literalzeichenfolgen sind. Andernfalls kann MySQL nicht sagen, dass es sich um ein Datum und nicht um die Zahl handelt (2011 MINUS 1 MINUS 1 = 2009).

Sie brauchen die DATE() - Umwandlungen auch nicht.

SELECT 
    * 
FROM 
    shortleavedetails 
WHERE 
    employee_code = '17' 
AND 
    (DATE(authorizeddate) <= '2011-01-01' 
    AND 
    DATE(authorizeddate) >= '2010-05-01') 
+0

Danke, es ist damit getan. – Aamir

+0

Es ist nicht notwendig, die Funktion DATE zu verwenden - die implizite Konvertierung an den Daten, da die Strings ab Mitternacht für diese Daten gelten. Tatsächlich bedeutet die Verwendung der Funktion DATE in diesem Beispiel, dass ein Index für die Spalte "authorizeddate" nicht verwendet werden kann. –

+0

Die Bedeutung dieser Abfrage wäre anders. Ohne 'DATUM' würde ein autorisiertes Datum von '2011-01-01 13:50' nicht übereinstimmen, während 'DATUM' nur so aussehen wird, als wenn nur der Datumsteil des Datums verglichen wird. –

1
SELECT * FROM shortleavedetails WHERE employee_code='17' AND 
authorizeddate <= '2011-01-01' AND authorizeddate >='2010-05-01' 
2

dieses versuchen

SELECT * FROM shortleavedetails WHERE employee_code='17' AND 
(authorizeddate<='2011-1-1' AND authorizeddate >= '2010-5-1')