2013-05-30 212 views
0

我有一個名爲日程安排的表,其中包含日,月,年等列。我需要的是選擇$ datefrom和$ dateto之間的記錄。這裏是我的代碼不工作:(MySQL選擇兩個日期之間的所有日期

SELECT * FROM schedules WHERE CONCAT(year, month, day) BETWEEN $datefrom AND $dateto 

林不知道這是否是正確的。請幫助。

+1

您可能需要投值作爲日期。在字符串之間使用'between'可能會產生不可預知的結果。 http://stackoverflow.com/questions/8076236/mysql-between-operator-with-dates – showdev

+0

CAST(CONCAT(年,月,日)AS DATE) – sashkello

回答

1

像showdev在評論已經說了,你要投的是從返回的字符串CONCAT()函數到目前爲止。但請考慮,沒有索引可以用於此。

我建議你在你的表中創建一個額外的列與完整日期我不知道如果你將日期分成3列出於性能的原因,但是試一試,如果只有一列對你來說足夠了,通常它是足夠快的(當被索引時)

如果你不想這樣做,並希望使用索引(如果它們都存在於那些3列),你會寫這樣的查詢:

SELECT * FROM schedules WHERE 
`year` BETWEEN YEAR($datefrom) AND YEAR($dateto) 
AND `month` BETWEEN MONTH($datefrom) AND MONTH($dateto) 
AND `day` BETWEEN DAY($datefrom) AND DAY($dateto) 
相關問題