前一篇寫了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()外,不知道還可以使用什么。