如果日期过期,我需要一个查询来删除一行

时间:2013-11-26 01:13:37

标签: mysql

这是我的问题:

DELETE FROM `upcoming` WHERE `Date` < DATE_FORMAT(CURDATE(), '%M-%d-%y')

当我运行它时,它会删除表格中的所有内容。 日期是我列出即将到来的活动日期的列。 这就是我在桌子上的内容。 它应该只删除一个日期而不是两个日期。

表:

12-25-13
11-11-13

今天的日期:

11-25-13

2 个答案:

答案 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'。

相关问题