MySQL将存储日期与当前日期进行比较并执行

时间:2015-05-15 19:48:15

标签: php mysql

我在table的{​​{1}}字段中以文本格式存储了日期(dd / mm / yyyy)。我想将这些日期与当前日期进行比较,如果日期较小(如果日期已过),则将整行移动到名为dates的新表中。用archive尝试了一些东西,但我是MySQL的新手并且无法解决这个问题。

1 个答案:

答案 0 :(得分:0)

我将用简短的评论为我的答案作序言:存储"日期" VARCHAR列中SQL数据库中的值是反模式。 MySQL提供原生数据类型DATE,旨在处理" date"值。但这只是一个评论,并没有回答你的问题。

您可以使用方便的MySQL STR_TO_DATE 功能将字符串转换为DATE值。例如:

STR_TO_DATE('15/05/2015','%d/%m/%Y')

您可以使用列引用代替文字,例如

STR_TO_DATE(t.mycharcol,'%d/%m/%Y')

这将返回DATE值,您可以使用标准不等式运算符DATE与另一个<值进行比较。

要从数据库返回当前日期,您可以使用诸如

之类的表达式
DATE(NOW())

将它们放在一起,您可以编写如下查询:

SELECT t.*
  FROM t
 WHERE STR_TO_DATE(t.mycharcol,'%d/%m/%Y') < DATE(NOW())

如果要从SELECT语句中获取结果并将这些行插入另一个表,则可以使用INSERT ... SELECT语句的 INSERT 形式。

参考:https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date

请注意格式错误或日期无效的行为,例如

 SELECT STR_TO_DATE('35/05/2015','%d/%m/%Y')
      , STR_TO_DATE('15-05-2015','%d/%m/%Y')