程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Mysql日期類型大小比較---拉取給定時間段的記錄

Mysql日期類型大小比較---拉取給定時間段的記錄

編輯:MySQL綜合教程

Mysql日期類型大小比較---拉取給定時間段的記錄   我們知道,mysql裡邊,日期類型有很多表現形式,date, datetime,timestamp等類型。考慮這樣一種場景:   www.2cto.com   按時間段拉取給定時間段的內容,這時,我們就得使用日期類型的比較了。   表結構:tablename_tbl   +-----------------+--------------+------+-----+-------------------+----------------+ | Field    |   Type |   Null |   Key |   Default |   Extra | +-----------------+--------------+------+-----+-------------------+----------------+ | id    |   mediumint(8)   | NO    | PRI   | NULL    |   auto_increment | | title    | varchar(40)    | NO    |    | NULL |    | | content  | mediumtext    | NO    |    | NULL |    | | addtime  | timestamp    | NO |    |   CURRENT_TIMESTAMP |    |   其中addtime為timestamp類型的,現在我們要拉去過去三小時內新增的記錄,我們可以采取比較unix時間戳以及比較日期這兩種方式實現;   首先看第一種:unix時間戳比較   Mysql內置函數:UNIX_TIMESTAMP()   若無參數調用,則默認返回一個 從 '1970-01-01 00:00:00' 到當前時刻的秒數(無符號整數)。若用date 來調用 unix_timestamp(),它會返回從 '1970-01-01 00:00:00' 到 date表示的時刻為止的秒數;date 可以是一個 date 字符串、一個 datetime字符串、一個 timestamp或一個當地時間的yymmdd 或yyymmdd格式的數字。   則sql語句可以這樣寫:   select id,title,content,addtime from tablename_tbl where UNIX_TIMESTAMP(addtime)>= UNIX_TIMESTAMP() - 10800 and UNIX_TIMESTAMP(addtime) <= UNIX_TIMESTAMP()   //10800為3小時的秒數。       第二種方式:日期比較   首先看直接使用+-運算:   這種方式中,特別需要注意的是,一個時間日期值加/減一個值的含義。   select now(); +---------------------+ | now() | +---------------------+ | 2013-03-15 13:08:45 | +---------------------+   通過now函數,我們可以獲取到當前的時間,然後再請看:   select now(),now()+1; +---------------------+-----------------------+ | now() | now()+1 | +---------------------+-----------------------+ | 2013-03-15 13:10:15 | 20130315131016.000000 | +---------------------+-----------------------+   select now(),now()-1; +---------------------+-----------------------+ | now() | now()-1 | +---------------------+-----------------------+ | 2013-03-15 13:14:18 | 20130315131417.000000 | +---------------------+-----------------------+   這兩條語句執行後,第二列表示是在當前時刻加上/減去 一秒,這裡要注意看第二列的表示形式:   20130315131016.000000  (yyyy mm dd HH MM ss.000000)即:在給now()加上或者減去一個值的時候,跟now()的結果的表示形式是不同的,我們再看:   select now(),now()-01; +---------------------+-----------------------+ | now() | now()-01 | +---------------------+-----------------------+ | 2013-03-15 13:15:05 | 20130315131504.000000 | +---------------------+-----------------------+   select now(),now()+01; +---------------------+-----------------------+ | now() | now()+01 | +---------------------+-----------------------+ | 2013-03-15 13:15:11 | 20130315131512.000000 | +---------------------+-----------------------+   看到這裡,很奇怪是不是,怎麼直接在數字前加0也可以執行?加減的難道不是秒數嗎?(我之前就是這樣認為的),執行的結果也是給now()加、減1秒;   select now(),now()+101; +---------------------+-----------------------+ | now() | now()+101 | +---------------------+-----------------------+ | 2013-03-15 13:17:14 | 20130315131815.000000 | +---------------------+-----------------------+   select now(),now()-101; +---------------------+-----------------------+ | now() | now()-101 | +---------------------+-----------------------+ | 2013-03-15 13:17:22 | 20130315131621.000000 | +---------------------+-----------------------+   我們這兩條語句後的執行結果,通過對比兩列,我們可以發現,分別是給now()的時刻加上1分鐘、1秒鐘, 減去1分鐘、1秒鐘;再看個例子   select now(),now()+0101; +---------------------+-----------------------+ | now() | now()+0101 | +---------------------+-----------------------+ | 2013-03-15 13:19:34 | 20130315132035.000000 | +---------------------+-----------------------+   select now(),now()-0101;  +---------------------+-----------------------+ | now() | now()-0101 | +---------------------+-----------------------+ | 2013-03-15 13:19:38 | 20130315131837.000000 | +---------------------+-----------------------+   是不是跟奇怪了,這兩條語句同樣也是給當前時間加/減1分鐘1秒鐘。再看一個結合了年月日的例子:   select now(), now()+00010203040506; +---------------------+-----------------------+ | now() | now()+00010203040506 | +---------------------+-----------------------+ | 2013-03-15 13:21:50 | 20140518172656.000000 | +---------------------+-----------------------+   select now(), now()-00010203040506;  +---------------------+-----------------------+ | now() | now()-00010203040506 | +---------------------+-----------------------+ | 2013-03-15 13:21:54 | 20120112091648.000000 | +---------------------+-----------------------+   看到這裡,我們大概就能夠明白了+-的含義了吧;上邊兩條語句是:給當前日期加減:1年2個月3天 4小時5分鐘6秒鐘。   所以,當我們在給now()+-一個時間的時候,其實應該這樣理解的:   +1/+01:加1秒鐘   +101/+0101:加1分鐘1秒鐘   +10101/+010101:加1小時1分鐘1秒鐘   +1010101/+01010101:加1天1分鐘1秒鐘   +101010101/+0101010101:加1月1天1分鐘1秒鐘   +1101010101/+010101010101:加1年1月1天1分鐘1秒鐘,這裡要注意下,年這個部分可以是4位(高位沒有的話會補零):00010101010101   (減也是類似的)   所以對於前邊的問題:拉去過去三小時內新增的記錄, 就可以這樣寫sql了:   select id,title,content,addtime from tablename_tbl where addtime >= now() - 30000 and addtime <= now()   另外還有一種方式就是使用mysql提供的:   date_add(向日期添加指定的時間間隔), DATE_ADD(date,INTERVAL expr type)   date 參數是合法的日期表達式。expr 參數是您希望添加的時間間隔。   Type 值 MICROSECOND SECOND MINUTE HOUR DAY WEEK MONTH QUARTER YEAR SECOND_MICROSECOND MINUTE_MICROSECOND MINUTE_SECOND HOUR_MICROSECOND HOUR_SECOND HOUR_MINUTE DAY_MICROSECOND DAY_SECOND DAY_MINUTE DAY_HOUR YEAR_MONTH   date_sub(向日期減去指定的時間間隔), DATE_SUB(date,INTERVAL expr type) (使用方法同date_add類似)   sql可以這樣寫:   select id,title,content,addtime from tablename_tbl where addtime >= date_sub(now, INTERVAL 3 HOUR) AND addtime < now()   (完)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved