在我的数据库表中,我有一个date字段(varchar字段以yy-mm-dd格式保存日期),现在我想选择两周前的记录。 我该怎么办?
答案 0 :(得分:8)
隐式日期算术在MySQL中相当灵活。您可以将日期比较为字符串,而无需明确使用CAST()
或DATE()
,但您信任MySQL以正确解释您的格式。幸运的是,它可以与yy-mm-dd
一起使用。
我建议您使用BETWEEN
和INTERVAL
,以便您的查询易于阅读;例如:
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