4

在我的数据库表中,我有一个日期字段(varchar 字段以 yy-mm-dd 格式保存日期),现在我想选择两周前的记录。我该怎么做 ?

4

4 回答 4

10

MySQL 中的隐式日期算法相当灵活。您可以在不显式使用CAST()or的情况下将日期作为字符串进行比较DATE(),但您相信 MySQL 能够正确解释您的格式。幸运的是,它会与yy-mm-dd.

我建议使用BETWEENandINTERVAL以便您的查询易于阅读;例如:

SELECT * FROM Holidays 
WHERE Date BETWEEN (NOW() - INTERVAL 14 DAY) AND NOW();

唯一的技巧BETWEEN是你必须把下限放在第一位,然后把上限放在第二位;例如,如果你写BETWEEN 5 AND 2,这总是评估为,FALSE因为没有值可以大于或等于 5 同时也小于或等于 2。

这是 SQL Fiddle 中的查询演示,以及MySQL中已识别INTERVAL表达式的列表。

请注意,表达式周围的括号NOW() - INTERVAL 14 DAY不是必需的,但为了清楚起见,我建议在这里使用它们。它使谓词子句在没有适当的语法突出显示的情况下更容易阅读,但代价是两个字符。

于 2013-09-06T16:30:09.833 回答
0

我用它来选择过去的数据

SELECT * FROM Holidays 
WHERE a.dDate >= DATE( NOW( ) ) - INTERVAL 14
DAY AND a.dDate <= DATE( NOW( ) ) - INTERVAL 8
于 2015-04-10T20:39:43.953 回答
0

理想情况下,您应该使用日期类型来存储日期,但事实并非如此,您应该考虑转换为日期然后进行比较。

select * from yourtable where cast (yourdate as Date) BETWEEN Date_Add(CURDATE(), INTERVAL -21 Day) and Date_Add(CURDATE(), INTERVAL -14 Day)

请注意,这是未经测试的,可能需要稍作调整,但应该让您大致了解您需要做什么。

此外,如果可能的话,您应该真正考虑将 varchar 字段转换为日期字段......他们有日期类型来防止这种事情发生,尽管我知道更改字段类型并不总是可能的。

于 2013-09-06T15:31:29.990 回答
0

您可以简单地使用ADDDATE14 天前获取。将字符串日期进行比较将起作用。

SELECT *
FROM your_table
WHERE your_date >= ADDDATE(NOW(), -14) AND your_date < NOW()
于 2013-09-06T15:58:08.770 回答