2010-12-13 118 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 2010-12-13 05:40:07

+0

日期沒有比較。 – Aamir 2010-12-13 05:41:01

回答

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

如[這裏]所示,最好轉換爲DATE(http://stackoverflow.com/questions/4897133/mysql-select-date-range-issue/4897195#4897195)。 – 2011-09-01 17:45:50

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 2010-12-13 05:45:06

+0

不需要使用DATE函數 - 日期中的隱式轉換將作爲字符串在那些日期的午夜。事實上,在這個例子中使用DATE函數意味着不能使用'authorizeddate'列上的索引(或包含/收斂)。 – 2010-12-13 06:05:06

+0

該查詢的含義會有所不同。如果沒有'DATE','2011-01-01 13:50'的授權日期與'DATE'不匹配,只會比較日期時間的日期部分。 – 2010-12-13 06:08:43

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')