MySQL选择30天范围内的日期

11

这应该很简单,但我却把它搞砸了,没有得到我想要的结果。我有以下代码:

SELECT id,title,start_date 
  FROM events 
 WHERE start_date > DATE_SUB(NOW(), INTERVAL 1 MONTH) 
  AND city = '$cityName' 
ORDER BY start_date DESC

现在这个查询选择了这个月的日期的事件,但是它所显示的这个月的定义与我需要的不同。我需要它显示30天内的事件,而不仅仅是这个月(即八月)的事件。如果我插入一个八月的事件,它会显示结果。如果我插入九月的事件,即使它距离现在不到30天,也不会显示。


"...我调整了一下..." 太好了!快点发布你的fiddle,这样我们也能来调整它。 - Mark Byers
哈哈,说实话我没有在那里瞎搞...更像是在开发环境中,但还是感谢你提供这么好的资源,伙计。 - sys_debug
4个回答

55

您应该将 1 MONTH 更改为 30 DAY

WHERE start_date > NOW() - INTERVAL 30 DAY

为了将其限制在任一方向上的30天:

WHERE start_date > NOW() - INTERVAL 30 DAY
AND start_date < NOW() + INTERVAL 30 DAY

@sys_debug:您需要一个结束日期吗?您希望它在之前或之后30天内?是否有一个名为 end_date 的列? - Mark Byers
1
实际上不用了,但是这仍然不起作用...它没有显示开始日期为2012-09-06的条目。 - sys_debug
@sys_debug:很好,很高兴你找到了问题。 - Mark Byers

3
这样怎么样:
...WHERE DATE(start_date) BETWEEN DATE_SUB(NOW(),INTERVAL 30 DAY) and DATE_SUB(NOW(),INTERVAL 1 DAY) AND city...

2

或者

并且 TIMESTAMPDIFF(DAY, YOURDATE, now()) < 30

这将给您一个30天的时间跨度。


1
我希望这也能有所帮助。
SELECT id,title,start_date 
  FROM events 
 WHERE  city = "$cityName" AND 
TIMESTAMPDIFF(DAY,start_date,now()) < 30   
ORDER BY start_date DESC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接