码迷,mamicode.com
首页 > 数据库 > 详细

(转)MySQL获取某个时间范围内的数据 TO_DAYS(date)函数与now()函数

时间:2016-08-22 18:12:17      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:

有这样一个需求,我们需要获得某个时间段内所有数据记录,比如最近一个月内的新闻,然后再在这个数据集合中进行排序,看哪个新闻的点击率最高。现在问题是,如何获得那个时间段。MySQL已经有些函数可以帮助我们,先看看这些函数吧。

TO_DAYS(date) 函数

给定一个日期date,返回一个天数(从年份0开始的天数)。

比如下面的例子:

1 mysql> SELECT TO_DAYS(‘2009-08-07‘);
2 +-----------------------+
3 | TO_DAYS(‘2009-08-07‘) |
4 +-----------------------+
5 |                733991 |
6 +-----------------------+
7 1 row in set

TO_DAYS() 不用于阳历出现(1582)前的值,原因是当日历改变时,遗失的日期不会被考虑在内。

请记住,MySQL“日期和时间类型”中的规则将日期中的二位数年份值转化为四位。例如,‘2010-08-07′和 ‘10-08-07′ 被视为同样的日期:

1 mysql> SELECT TO_DAYS(‘2009-08-07‘),TO_DAYS(‘09-08-07‘);
2 +-----------------------+---------------------+
3 | TO_DAYS(‘2009-08-07‘) | TO_DAYS(‘09-08-07‘) |
4 +-----------------------+---------------------+
5 |                733991 |              733991 |
6 +-----------------------+---------------------+
7 1 row in set

对于1582年之前的日期(或许在其它地区为下一年),该函数的结果实不可靠的。

now() 函数

NOW() 函数返回当前的日期和时间。

1 mysql> select (now());
2 +---------------------+
3 | (now())             |
4 +---------------------+
5 | 2010-08-26 21:18:44 |
6 +---------------------+
7 1 row in set

to_days(current_date)也可以实现上面的功能。

1 mysql> select to_days(current_date);
2 +-----------------------+
3 | to_days(current_date) |
4 +-----------------------+
5 |                734375 |
6 +-----------------------+
7 1 row in set

结果

现在我们可以得出问题的答案了:

1 select * from news where to_days(now())-to_days(newsdate) < 30 order by view desc limit 0, 10

可以获得一个月内浏览数最高的十条记录。

 

转至(http://www.nowamagic.net/librarys/veda/detail/415)

(转)MySQL获取某个时间范围内的数据 TO_DAYS(date)函数与now()函数

标签:

原文地址:http://www.cnblogs.com/TerrySunShine/p/5796387.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!