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