选择在日期范围内的mysql查询?

56
如何从MySQL表中选择过去到当前日期的数据?例如,选择2009年1月1日至今天的数据?我的"datetime"列是datetime类型。请帮助,谢谢。
编辑:
如果我要从2009年1月1日开始逐日获取数据,该如何编写查询语句?使用count和between函数吗?
4个回答

92
select * from *table_name* where *datetime_column* between '01/01/2009' and curdate()

或者使用>=<=

select * from *table_name* where *datetime_column* >= '01/01/2009' and *datetime_column* <= curdate()

很好,它可以工作。最后一个问题:如果我想显示自2009年1月1日以来每天的数据,必须使用计数函数对吧?有什么实现的想法吗? - user176593
你可以使用 "group by" 和 "order by",像这样: select * from [table_name] where [datetime_column] between '01/01/2009' and curdate() group by [datetime_column] order by [datetime_column] - Noah Heldman
我尝试了这个查询语句:SELECT , count() from table WHERE datetime BETWEEN '2009-01-01' AND '2009-09-01' GROUP BY datetime;但是结果只有一个计数。应该是10、5、8等等... - user176593
你必须在count()函数中包含你想要计数的列名。因此,在这种情况下,你会使用count(datetime)。 - Noah Heldman
你需要按 Day(<datetime_column>) 进行分组,而不仅仅是按列进行分组,因为我认为 datetime 字段可以精确到毫秒,这意味着你最终会得到以毫秒为单位分组的结果,而不是按天分组。 - CSharpAtl
显示剩余5条评论

26

以上所有方法都有效,如果你仅想知道天数或时间差而不是输入日期,则还有另一种方法。

select * from *table_name* where *datetime_column* BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY)  AND NOW() 

15

您可以像这样使用 now()

Select data from tablename where datetime >= "01-01-2009 00:00:00" and datetime <= now();

4
晚了些回答,但被接受的答案对我没有用。
如果手动设置开始和结束日期(不使用curdate()),请确保在结束日期上指定小时、分钟和秒2019-12-02 23:59:59),否则您将无法从那一天获得任何结果,即:

将包括来自2019-12-02的记录:

SELECT *SOMEFIELDS* FROM *YOURTABLE* where *YOURDATEFIELD* between '2019-12-01' and '2019-12-02 23:59:59'

不会包括来自2019-12-02的记录:

SELECT *SOMEFIELDS* FROM *YOURTABLE* where *YOURDATEFIELD* between '2019-12-01' and '2019-12-02'

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