这是我的问题:
DELETE FROM `upcoming` WHERE `Date` < DATE_FORMAT(CURDATE(), '%M-%d-%y')
当我运行它时,它会删除表格中的所有内容。 日期是我列出即将到来的活动日期的列。 这就是我在桌子上的内容。 它应该只删除一个日期而不是两个日期。
表:
12-25-13
11-11-13
今天的日期:
11-25-13
答案 0 :(得分:0)
尝试
DELETE FROM `upcoming` WHERE STR_TO_DATE(`Date`, '%M-%d-%y') < DATE_FORMAT(CURDATE(), '%M-%d-%y')
答案 1 :(得分:0)
规范模式是使用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可以使用索引范围扫描。
另外:'%M'
格式说明符返回月份名称,“1月”,“2月”等。'%m'
说明符返回数字月'01','02'。