這裏是我的查詢:我需要一個查詢來刪除一行,如果日期是過期
DELETE FROM `upcoming` WHERE `Date` < DATE_FORMAT(CURDATE(), '%M-%d-%y')
當我運行它,它會刪除我的表中的每一件事。 日期是我放置即將到來的事件日期的列。 這是我在我的桌子上。 它應該只刪除一個日期不是他們兩個。
表:
12-25-13
11-11-13
今天的日期:
11-25-13
這裏是我的查詢:我需要一個查詢來刪除一行,如果日期是過期
DELETE FROM `upcoming` WHERE `Date` < DATE_FORMAT(CURDATE(), '%M-%d-%y')
當我運行它,它會刪除我的表中的每一件事。 日期是我放置即將到來的事件日期的列。 這是我在我的桌子上。 它應該只刪除一個日期不是他們兩個。
表:
12-25-13
11-11-13
今天的日期:
11-25-13
嘗試
DELETE FROM `upcoming` WHERE STR_TO_DATE(`Date`, '%M-%d-%y') < DATE_FORMAT(CURDATE(), '%M-%d-%y')
的規範模式是使用DATE
數據類型來存儲數據。
它看起來像是將「日期」值存儲爲VARCHAR,格式爲「mm-dd-yy」。 VARCHAR
表達式的比較按字符從左到右進行。具有月份的字符表示不是按正則順序排列的,也就是說,某種mm-dd-yy值不會按日期順序排序,例如, '01 -01-13'(2013年1月)將在'11-27-12'之前排序(2012年11月)。
根據SQL語句,最簡單的方法是將VARCHAR轉換爲DATE
數據類型,並將其與一個也返回DATE
的表達式進行比較。
DELETE FROM `upcoming` WHERE STR_TO_DATE(`Date`,'%m-%d-%y') < CURDATE()
就性能而言,MySQL無法執行索引範圍掃描來滿足此謂詞。需要檢查表中的每一行,進行轉換,然後進行比較。如果列存儲爲DATE
,那麼可以在謂詞中引用裸列,並且MySQL可以使用索引範圍掃描。
ALSO:'%M'
格式說明返回月份的名字, '一月', '二月',等等。'%m'
符返回月份數字 '01', '02'。
是不是'date'是mysql中的保留字? – Babblo
如果您的日期格式爲mm-dd-yy,那麼爲什麼您的查詢使用mm/dd/yy? – 2013-11-26 01:16:30
這可能會有所幫助:[刪除所有行比5天更早](http://stackoverflow.com/questions/5853543/deleting-all-rows-older-than-5-days) – showdev