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

Mysql 如果日期过期,我需要一个查询来删除一行,mysql,Mysql,我的问题是: DELETE FROM `upcoming` WHERE `Date` < DATE_FORMAT(CURDATE(), '%M-%d-%y') 今日日期: 11-25-13 试一试 DELETE FROM`comming`WHERE STR_TO_DATE(`DATE`,'%M-%d-%y')

我的问题是:

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

11-25-13
试一试

DELETE FROM`comming`WHERE STR_TO_DATE(`DATE`,'%M-%d-%y')<日期格式(CURDATE(),'%M-%d-%y'))

标准模式是使用
日期
数据类型来存储日期值

看起来您正在将“日期”值存储为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()
从'comming'中删除,其中STR_TO_DATE('DATE','%m-%d-%y')
就性能而言,MySQL无法执行索引范围扫描以满足此谓词。需要检查表中的每一行,进行转换,然后进行比较。如果该列存储为
日期
,则可以在谓词中引用裸列,MySQL可以使用索引范围扫描



另外:
'%M'
格式说明符返回月份名称“一月”、“二月”等。
'%M'
说明符返回数字月份“01”、“02”。

在mysql中不是
date
保留字吗?如果您的日期格式是mm-dd-yy,为什么您的查询使用mm/dd/yy?这可能会有帮助:
DELETE FROM `upcoming` WHERE STR_TO_DATE(`Date`, '%M-%d-%y') < DATE_FORMAT(CURDATE(), '%M-%d-%y')
DELETE FROM `upcoming` WHERE STR_TO_DATE(`Date`,'%m-%d-%y') < CURDATE()