两周前选择查询

时间:2013-09-06 15:21:31

标签: mysql select date-arithmetic

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

4 个答案:

答案 0 :(得分:8)

隐式日期算术在MySQL中相当灵活。您可以将日期比较为字符串,而无需明确使用CAST()DATE(),但您信任MySQL以正确解释您的格式。幸运的是,它可以与yy-mm-dd一起使用。

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

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

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

Here's a demo of the query in action at SQL Fiddle,以及MySQL中recognized INTERVAL expressions的列表。

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

答案 1 :(得分:0)

理想情况下,你应该使用日期类型来存储日期,但事实并非如此,你应该考虑到目前为止的铸造然后进行比较。

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

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

另外,如果可能,你应该真正考虑将varchar字段转换为日期字段....它们有日期类型以防止发生这种事情,虽然我知道更改字段类型并不总是可能性。

答案 2 :(得分:0)

您只需使用ADDDATE即可获得14天前的信息。比较字符串日期将有效。

SELECT *
FROM your_table
WHERE your_date >= ADDDATE(NOW(), -14) AND your_date < NOW()

答案 3 :(得分:0)

我将它用于过去的选择数据

SELECT * FROM Holidays 
WHERE a.dDate >= DATE( NOW( ) ) - INTERVAL 14
DAY AND a.dDate <= DATE( NOW( ) ) - INTERVAL 8