標籤:
有這樣一個需求,我們需要獲得某個時間段內所有資料記錄,比如最近一個月內的新聞,然後再在這個資料集合中進行排序,看哪個新聞的點擊率最高。現在問題是,如何獲得那個時間段。MySQL已經有些函數可以協助我們,先看看這些函數吧。
TO_DAYS(date) 函數
給定一個日期date,返回一個天數(從年份0開始的天數)。
比如下面的例子:
1 |
mysql> SELECT TO_DAYS(‘2009-08-07‘); |
2 |
+-----------------------+ |
3 |
| TO_DAYS(‘2009-08-07‘) | |
4 |
+-----------------------+ |
6 |
+-----------------------+ |
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 |
+-----------------------+---------------------+ |
6 |
+-----------------------+---------------------+ |
對於1582年之前的日期(或許在其它地區為下一年),該函數的結果實不可靠的。
now() 函數
NOW() 函數返回當前的日期和時間。
2 |
+---------------------+ |
4 |
+---------------------+ |
5 |
| 2010-08-26 21:18:44 | |
6 |
+---------------------+ |
to_days(current_date)也可以實現上面的功能。
1 |
mysql> select to_days(current_date); |
2 |
+-----------------------+ |
3 |
| to_days(current_date) | |
4 |
+-----------------------+ |
6 |
+-----------------------+ |
結果
現在我們可以得出問題的答案了:
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()函數