MySQL获取某个时间范围内的数据
程序员文章站
2023-12-23 20:12:39
...
有这样一个需求,我们需要获得某个时间段内所有数据记录,比如最近一个月内的新闻,然后再在这个数据集合中进行排序,看哪个新闻的点击率最高。现在问题是,如何获得那个时间段。MySQL已经有些函数可以帮助我们,先看看这些函数吧。 TO_DAYS(date) 函数 给定
有这样一个需求,我们需要获得某个时间段内所有数据记录,比如最近一个月内的新闻,然后再在这个数据集合中进行排序,看哪个新闻的点击率最高。现在问题是,如何获得那个时间段。MySQL已经有些函数可以帮助我们,先看看这些函数吧。
TO_DAYS(date) 函数
给定一个日期date,返回一个天数(从年份0开始的天数)。
比如下面的例子:
mysql> SELECT TO_DAYS('2009-08-07'); +-----------------------+ | TO_DAYS('2009-08-07') | +-----------------------+ | 733991 | +-----------------------+ 1 row in set
TO_DAYS() 不用于阳历出现(1582)前的值,原因是当日历改变时,遗失的日期不会被考虑在内。
请记住,MySQL“日期和时间类型”中的规则将日期中的二位数年份值转化为四位。例如,‘2010-08-07′和 ‘10-08-07′ 被视为同样的日期:
mysql> SELECT TO_DAYS('2009-08-07'),TO_DAYS('09-08-07'); +-----------------------+---------------------+ | TO_DAYS('2009-08-07') | TO_DAYS('09-08-07') | +-----------------------+---------------------+ | 733991 | 733991 | +-----------------------+---------------------+ 1 row in set
对于1582年之前的日期(或许在其它地区为下一年),该函数的结果实不可靠的。
now() 函数
NOW() 函数返回当前的日期和时间。
mysql> select (now()); +---------------------+ | (now()) | +---------------------+ | 2010-08-26 21:18:44 | +---------------------+ 1 row in set
to_days(current_date)也可以实现上面的功能。
mysql> select to_days(current_date); +-----------------------+ | to_days(current_date) | +-----------------------+ | 734375 | +-----------------------+ 1 row in set
结果
现在我们可以得出问题的答案了:
select * from news where to_days(now())-to_days(newsdate)可以获得一个月内浏览数最高的十条记录。
推荐阅读
-
MySQL获取某个时间范围内的数据
-
php获取mysql数据库中的所有表名的代码_PHP
-
统计某个连续时间段内的用户具体数据的sql语句该如何写?
-
mysql如何自动获取时间日期的实例详解
-
获取数据库中两个时间字段的相差天数及ABS/DATEDIFF函数应用
-
MySQL实现当前数据表的所有时间都增加或减少指定的时间间隔(推荐)
-
详解mysql 获取某个时间段每一天、每一个小时的统计数据
-
获取数据库中两个时间字段的相差天数及ABS/DATEDIFF函数应用
-
MySQL实现当前数据表的所有时间都增加或减少指定的时间间隔(推荐)
-
Oracle数据库根据时间范围查询时间范围内的年,月,日以及一天的24小时(实例)