【发布时间】:2011-11-15 13:02:50
【问题描述】:
我的数据具有日期 (Y-m-d H:i:s) 列(类型为日期时间)。我想选择输入日期前 1 周的所有记录(在下面的示例中:2011-09-17 00:00:00,但遇到了一些问题。这就是我所得到的:
SELECT * FROM emails WHERE (DATE(date) = date_sub(date('2011-09-17 00:00:00'), 1 week))
我做错了什么?谢谢
【问题讨论】:
我的数据具有日期 (Y-m-d H:i:s) 列(类型为日期时间)。我想选择输入日期前 1 周的所有记录(在下面的示例中:2011-09-17 00:00:00,但遇到了一些问题。这就是我所得到的:
SELECT * FROM emails WHERE (DATE(date) = date_sub(date('2011-09-17 00:00:00'), 1 week))
我做错了什么?谢谢
【问题讨论】:
我认为你在1 week前面缺少INTERVAL:
SELECT *
FROM emails
WHERE (DATE(date) = date_sub(date('2011-09-17 00:00:00'), INTERVAL 1 week));
这是我运行的一个查询,它适用于 DATE_SUB() 部分:
SELECT *
FROM wp_posts
WHERE post_modified > DATE_SUB(CURDATE(), INTERVAL 4 WEEK);
您可以使用负值进行“在给定日期前 N 周”查询,这样就可以了:
SELECT *
FROM wp_posts
WHERE post_modified > DATE_SUB(CURDATE(), INTERVAL -1 WEEK);
或者:
SELECT *
FROM emails
WHERE (DATE(date) = date_sub(date('2011-09-17 00:00:00'), INTERVAL -1 week))
【讨论】:
mypost WHERE (DATE(post_date) post_date ASC 订购
试试这个,我喜欢坚持使用 DATE_ADD 并且只使用负值。
SELECT * FROM emails WHERE date >= DATE_ADD('2011-09-17 00:00:00', INTERVAL -1 WEEK)
【讨论】:
SELECT * FROM wp_posts
WHERE post_modified
BETWEEN SYSDATE() - INTERVAL 7 DAY
AND SYSDATE();
【讨论】: