MySQL日期函數EXTRACT()、DATE_ADD()、DATE_SUB()、DATEDIFF()、DATE_FORMAT()、UNIX_TIMESTAMP()、FROM_UNIXTIME()

一、實戰

 

實際開發中使用技巧

1、查詢數據時間向前推進指定時間

SELECT * FROM table WHERE ctime >= DATE_SUB(ctime,INTERVAL -7 DAY);

2、查詢數據時轉換時間戳輸出日期格式

SELECT FROM_UNIXTIME(utime) FROM table;

3、日期格式轉化輸出

SELECT DATE_FORMAT(utime,"%Y/%m/%d") FROM table;

實際開發中的問題

1、數據庫存儲時間戳,存在的潛在問題:

     a、數據庫和腳本服務器不在一臺服務器,時區設置可能導致時間轉化問題。

     b、數據庫遷移,時區未能及時同步導致時間轉化問題。

 

二、基礎知識

NOW() 返回當前日期和時間

SELECT NOW();

CURDATE() 返回當前日期

SELECT CURDATE();

CURTIME() 返回當前時間

SELECT CURTIME();

DATE() 返回日期或日期/時間表達式的日期部分

SELECT DATE();

EXTRACT() 函數用於返回日期/時間的單獨部分,比如年、月、日、小時、分鐘、秒

SELECT EXTRACT(unit FROM date);#語法結構 
#date 參數是合法的日期表達式
#unit 參數可以
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         #年月

SELECT EXTRACT(DAY FROM NOW());#當月時間的幾號


DATE_ADD() 日期添加指定的時間間隔

SELECT DATE_ADD(date,INTERVAL expr unit);#語法結構
#date 參數是合法的日期表達式
#expr 參數是時間間隔
#unit 參數可以
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 日期減去指定的時間間隔

SELECT DATE_SUB(date,INTERVAL expr unit);#語法結構
#date 參數是合法的日期表達式
#expr 參數是時間間隔
#unit 參數可以
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         #年月

DATEDIFF() 返回兩個日期之間的天數

SELECT DATEDIFF(expr1,expr2);#語法結構
#expr1 expr2 日期格式參數

DATE_FORMAT() 用於以不同的格式顯示日期/時間數據

SELECT DATE_FORMAT(date,format);#語法結構
#date 日期
#format 規定日期/時間的輸出格式

%a	縮寫星期名
%b	縮寫月名
%c	月,數值
%D	帶有英文前綴的月中的天
%d	月的天,數值(00-31)
%e	月的天,數值(0-31)
%f	微秒
%H	小時 (00-23)
%h	小時 (01-12)
%I	小時 (01-12)
%i	分鐘,數值(00-59)
%j	年的天 (001-366)
%k	小時 (0-23)
%l	小時 (1-12)
%M	月名
%m	月,數值(00-12)
%p	AM 或 PM
%r	時間,12-小時(hh:mm:ss AM 或 PM)
%S	秒(00-59)
%s	秒(00-59)
%T	時間, 24-小時 (hh:mm:ss)
%U	周 (00-53) 星期日是一週的第一天
%u	周 (00-53) 星期一是一週的第一天
%V	周 (01-53) 星期日是一週的第一天,與 %X 使用
%v	周 (01-53) 星期一是一週的第一天,與 %x 使用
%W	星期名
%w	周的天 (0=星期日, 6=星期六)
%X	年,其中的星期日是周的第一天,4 位,與 %V 使用
%x	年,其中的星期一是周的第一天,4 位,與 %v 使用
%Y	年,4 位
%y	年,2 位

UNIX_TIMESTAMP() 返回Unix時間戳

SELECT UNIX_TIMESTAMP();#時間戳

 

FROM_UNIXTIME() 格式化Unix時間戳返回日期格式或日期時間等

SELECT FROM_UNIXTIME(unix_timestamp,format);#語法結構
#unix_timestamp Unix時間戳
#format 格式化輸出參數

%a	縮寫星期名
%b	縮寫月名
%c	月,數值
%D	帶有英文前綴的月中的天
%d	月的天,數值(00-31)
%e	月的天,數值(0-31)
%f	微秒
%H	小時 (00-23)
%h	小時 (01-12)
%I	小時 (01-12)
%i	分鐘,數值(00-59)
%j	年的天 (001-366)
%k	小時 (0-23)
%l	小時 (1-12)
%M	月名
%m	月,數值(00-12)
%p	AM 或 PM
%r	時間,12-小時(hh:mm:ss AM 或 PM)
%S	秒(00-59)
%s	秒(00-59)
%T	時間, 24-小時 (hh:mm:ss)
%U	周 (00-53) 星期日是一週的第一天
%u	周 (00-53) 星期一是一週的第一天
%V	周 (01-53) 星期日是一週的第一天,與 %X 使用
%v	周 (01-53) 星期一是一週的第一天,與 %x 使用
%W	星期名
%w	周的天 (0=星期日, 6=星期六)
%X	年,其中的星期日是周的第一天,4 位,與 %V 使用
%x	年,其中的星期一是周的第一天,4 位,與 %v 使用
%Y	年,4 位
%y	年,2 位

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章