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

を試してみてください – Lee

+0

日付が比較されていません。 – Aamir

答えて

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

[ここ](http://stackoverflow.com/questions/4897133/mysql-select-date-range-issue/4897195#4897195)のようにDATEにキャストする方が良いです。 –

2

リテラル文字列であるため、日付の値を一重引用符で囲んでください。そうでないと、MySQLでは日付ではなく、数字ではありません(2011 MINUS 1 MINUS 1 = 2009)。

DATE()キャストも必要ありません。

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

ありがとう、これによってこれが行われます。 – Aamir

+0

DATE関数を使用する必要はありません。日付の暗黙的な変換は、文字列がそれらの日付の深夜の時点で行われるためです。実際、この例のDATE関数を使用すると、 'authorizeddate'カラムのインデックス(または変換/包含/変換)を使用できないことを意味します。 –

+0

そのクエリの意味は異なります。 'DATE'がなければ、 '2011-01-01 13:50'の承認日は一致しませんが、' DATE'ではdatetimeの日付部分だけが比較されます。 –

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

あなたの質問は何ですか?この

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