MySQL時間函數,用起來比PHP還爽


  前一篇寫了PHP的時間函數(還是草稿),這一篇就寫Mysql的時間函數吧。最近做的項目,關乎權限,於是自然而然的就與有效期聯系在了一起。其中有一個功能是生成特殊表格,可以根據用戶的選擇,按周、月、季、年來處理數據。這其中要與PHP和MySQL函數打交道。考慮到這些時間函數,是進行業務的基礎。於是還是牢牢的背下來比較好。

 


1、當前的時間(字符串時間與unix時間戳時間):

  經常有需求要獲取服務器當前的時間,在mysql里面很簡單:now()

      

     這個now() 時間是當前mysql服務器的時間,並不是我們執行操作(比如用戶注冊)行為的時間。mysql執行操作行為的時間是:sysdate();

          這兩個時間的主要區別:now() 是系統的時間。是一直都存在的。而sysdate() 是我們執行一個操作時候的時間。關於獲取當前時間,mysql還有一些其他的函數,不過名字起的亂七八糟,什么current_timestamp()   current_timestamp,localtime()   localtime,localtimestamp()   localtimestamp。名字明明是timestamp,但是結果卻是一個字符串,願意學習的朋友可以多記幾個。

    上面的now() 和sysdate()  是一個字符串的時間。我們有時候,也會用到當前的時間戳。

    當前的時間戳:unix_timestamp();

    這個函數如果()里面沒有傳值,獲取的是當前的時間戳。如果傳值則是獲取所串進去的時間的時間戳。看圖:

    

 

    2、時間的格式化。

    時間的格式化一般分為以下幾種需求:

    ①   將字符串的時間變成unix時間戳。例如將  2015-11-14 04:03:16 變成 1447445028

    ②  將unix時間戳變成字符串的時間。 例如將   1447445028 變成 2015-11-14 04:03:16

    ③  將字符串時間戳進行格式化,只取年, 只取月,只取周等等。

    來吧,我們一一擊破。

    針對第一種需求,前面已經講過了,使用unix_timestamp()函數即可。例如 unix_timestamp('2014-05-09');

    針對第二種需求,既然有unix_timestamp函數也肯定有from_unixtime這個函數。顧名思意,是將一個unixtime轉化成時間戳。有兩種寫法,可以各取所需。

    

 

     針對第三種需求:經常需要獲取某個時間的年份、月份、或者在一年中是第幾周、是第幾個季度等等。那么我們就需要下面這些函數了。

    

      這些單詞比較簡單,所以記憶起來也不費功夫。

      比如有一個需求,我想看看一周中,周一至周五中,注冊會員的情況是怎樣的。則上面的情況就不能幫助我們了。我們需要取出會員的注冊時間,然后拿到PHP里面換算出,今天是星期幾,然后統計人數。

     mysql知道我們可能會有這個需求,於是類似的函數也寫好了。

    

     又比如,我想知道每個月月末那一天公司產品的銷售狀況。通常這個要靠PHP來算出一個月的最后一天是什么,然后到數據庫去查。但是mysql又幫我做好了,簡直太省力了。

    

     補充一點: 使用extract()函數也能滿足上面的需求,具體的用法:select extract();下面的用法看看就好,如果有喜歡的,也可以使用。

      set @dt = '2008-09-10 07:15:30.123456';
 
select extract(year from @dt); -- 2008
select extract(quarter from @dt); -- 3
select extract(month from @dt); -- 9
select extract(week from @dt); -- 36
select extract(day from @dt); -- 10
select extract(hour from @dt); -- 7
select extract(minute from @dt); -- 15
select extract(second from @dt); -- 30
select extract(microsecond from @dt); -- 123456
select extract(year_month from @dt); -- 200809
select extract(day_hour from @dt); -- 1007
select extract(day_minute from @dt); -- 100715
select extract(day_second from @dt); -- 10071530
select extract(day_microsecond from @dt); -- 10071530123456
select extract(hour_minute from @dt); -- 715
select extract(hour_second from @dt); -- 71530
select extract(hour_microsecond from @dt); -- 71530123456
select extract(minute_second from @dt); -- 1530
select extract(minute_microsecond from @dt); -- 1530123456
select extract(second_microsecond from @dt); -- 30123456

    3、日期的加減運算。

     實際項目中,經常會查看一些產品的歷史性信息。有了mysql的日期加減函數,就不需要先用PHP算好時間,然后傳進mysql里。這些mysql都可以處理。

    

   

 

     還有一些其他的用法,總之只要你想到的,Mysql都已經做好了。感興趣的,可以參考mysql手冊。

后期如果有遇到比較好用的功能也會繼續補充。


 

補充:

mysql的默認 字段是不能是函數的,但是mysql的timestamp類型卻可以使用mysql的自帶函數。目前僅知道可以使用current_timestamp()外,不知道還可以使用什么。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM