mysql 日期 時間函數

mysql 中 時間和日期函數 html

1、MySQL 得到當前日期時間 函數

  1.1    得到當前日期   +   時間(date    +    time)函數:now()

mysql
  >       select    now();

  +   --   -------------------+  
  |    now()                  |  
  +   --   -------------------+  
  |       2008   -   08   -   08       22   :   20   :   46       |  
  +   --   -------------------+  
 
除了 now() 函數能得到當前的日期時間外,MySQL 中還有下面的函數:

 
  current_timestamp   ()
,
  current_timestamp  
,localtime()
,localtime
,localtimestamp    
  --    (v4.0.6)  
  ,localtimestamp()     --    (v4.0.6)  
 
這些日期時間函數,都等同於 now()。鑑於 now() 函數簡短易記,建議老是使用 now() 來替代上面列出的函數。

  1.2    得到當前日期   +   時間(date    +    time)函數:sysdate()

sysdate() 日期時間函數跟 now() 相似,不一樣之處在於:now() 在執行開始時值就獲得了, sysdate() 在函數執行時動態獲得值。看下面的例子就明白了:

mysql
  >       select    now(), sleep(   3   ), now();

  +   --   -------------------+----------+---------------------+  
  |    now()                  |    sleep(   3     |    now()                  |  
  +   --   -------------------+----------+---------------------+  
  |       2008   -   08   -   08       22   :   28   :   21       |              0       |       2008   -   08   -   08       22   :   28   :   21       |  
  +   --   -------------------+----------+---------------------+  
 
mysql
  >       select    sysdate(), sleep(   3   ), sysdate();

  +   --   -------------------+----------+---------------------+  
  |    sysdate()              |    sleep(   3     |    sysdate()              |  
  +   --   -------------------+----------+---------------------+  
  |       2008   -   08   -   08       22   :   28   :   41       |              0       |       2008   -   08   -   08       22   :   28   :   44       |  
  +   --   -------------------+----------+---------------------+  
 
能夠看到,雖然中途 sleep 
  3    秒,但 now() 函數兩次的時間值是相同的; sysdate() 函數兩次獲得的時間值相差    3    秒。MySQL Manual 中是這樣描述 sysdate() 的:   Return    the time at which the    function    executes。

sysdate() 日期時間函數,通常狀況下不多用到。

  2   . 得到當前日期(date)函數:curdate()

mysql
  >       select    curdate();

  +   --   ----------+  
  |    curdate()     |  
  +   --   ----------+  
  |       2008   -   08   -   08       |  
  +   --   ----------+  
 
其中,下面的兩個日期函數等同於 curdate():

 
  current_date   ()
,
  current_date  

  3   . 得到當前時間(time)函數:curtime()

mysql
  >       select    curtime();

  +   --   ---------+  
  |    curtime()    |  
  +   --   ---------+  
  |       22   :   41   :   30        |  
  +   --   ---------+  
 
其中,下面的兩個時間函數等同於 curtime():

 
  current_time   ()
,
  current_time  

  4   . 得到當前 UTC 日期時間函數:utc_date(), utc_time(), utc_timestamp()

mysql
  >       select    utc_timestamp(), utc_date(), utc_time(), now()

  +   --   -------------------+------------+------------+---------------------+  
  |    utc_timestamp()        |    utc_date()    |    utc_time()    |    now()                  |  
  +   --   -------------------+------------+------------+---------------------+  
  |       2008   -   08   -   08       14   :   47   :   11       |       2008   -   08   -   08       |       14   :   47   :   11         |       2008   -   08   -   08       22   :   47   :   11       |  
  +   --   -------------------+------------+------------+---------------------+  
 
由於我國位於東八時區,因此本地時間 
  =    UTC 時間    +       8    小時。UTC 時間在業務涉及多個國家和地區的時候,很是有用。
2、MySQL 日期時間 Extract(選取) 函數。

  1   . 選取日期時間的各個部分:日期、時間、年、季度、月、日、小時、分鐘、秒、微秒

  set       @dt       =       '   2008-09-10 07:15:30.123456   '   ;

  select    date(   @dt   );           --    2008-09-10  
  select    time(   @dt   );           --    07:15:30.123456  
  select       year   (   @dt   );           --    2008  
  select    quarter(   @dt   );        --    3  
  select       month   (   @dt   );          --    9  
  select    week(   @dt   );           --    36  
  select       day   (   @dt   );            --    10  
  select    hour(   @dt   );           --    7  
  select    minute(   @dt   );         --    15  
  select    second(   @dt   );         --    30  
  select    microsecond(   @dt   );    --    123456  
 
  2   . MySQL 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  
 
MySQL Extract() 函數除了沒有date(),time() 的功能外,其餘功能一應具全。而且還具備選取‘day_microsecond’ 等功能。注意這裏不是隻選取 
  day    和 microsecond,而是從日期的    day    部分一直選取到 microsecond 部分。夠強悍的吧!

MySQL Extract() 函數惟一很差的地方在於:你須要多敲幾回鍵盤。

  3   . MySQL dayof… 函數:dayofweek(), dayofmonth(), dayofyear()

分別返回日期參數,在一週、一月、一年中的位置。

  set       @dt       =       '   2008-08-08   '   ;

  select    dayofweek(   @dt   );      --    6  
  select    dayofmonth(   @dt   );     --    8  
  select    dayofyear(   @dt   );      --    221  
 
日期 ‘
  2008   -   08   -   08   ′ 是一週中的第    6    天(   1       =    Sunday,    2       =    Monday, …,    7       =    Saturday);一月中的第    8    天;一年中的第    221    天。

  4   . MySQL week… 函數:week(), weekofyear(), dayofweek(), weekday(), yearweek()

  set       @dt       =       '   2008-08-08   '   ;

  select    week(   @dt   );           --    31  
  select    week(   @dt   ,   3   );         --    32  
  select    weekofyear(   @dt   );     --    32  
 
  select    dayofweek(   @dt   );      --    6  
  select    weekday(   @dt   );        --    4  
 
  select    yearweek(   @dt   );       --    200831  
 
MySQL week() 函數,能夠有兩個參數,具體可看手冊。 weekofyear() 和 week() 同樣,都是計算「某天」是位於一年中的第幾周。 weekofyear(
  @dt   ) 等價於 week(   @dt   ,   3   )。

MySQL weekday() 函數和 dayofweek() 相似,都是返回「某天」在一週中的位置。不一樣點在於參考的標準, weekday:(
  0       =    Monday,    1       =    Tuesday, …,    6       =    Sunday); dayofweek:(   1       =    Sunday,    2       =    Monday, …,    7       =    Saturday)

MySQL yearweek() 函數,返回 
  year   (   2008     +    week 位置(   31   )。

  5   . MySQL 返回星期和月份名稱函數:dayname(), monthname()

  set       @dt       =       '   2008-08-08   '   ;

  select    dayname(   @dt   );        --    Friday  
  select    monthname(   @dt   );      --    August  
 
思考,如何返回中文的名稱呢?

  6   . MySQL last_day() 函數:返回月份中的最後一天。

  select    last_day(   '   2008-02-01   '   );     --    2008-02-29  
  select    last_day(   '   2008-08-08   '   );     --    2008-08-31  
 
MySQL last_day() 函數很是有用,好比我想獲得當前月份中有多少天,能夠這樣來計算:

mysql
  >       select    now(),    day   (last_day(now()))    as    days;

  +   --   -------------------+------+  
  |    now()                  |    days    |  
  +   --   -------------------+------+  
  |       2008   -   08   -   09       11   :   45   :   45       |         31       |  
  +   --   -------------------+------+  
 
3、MySQL 日期時間計算函數

  1   . MySQL 爲日期增長一個時間間隔:date_add()

  set       @dt       =    now();

  select    date_add(   @dt   , interval    1       day   );           --    add 1 day  
  select    date_add(   @dt   , interval    1    hour);          --    add 1 hour  
  select    date_add(   @dt   , interval    1    minute);        --      
  select    date_add(   @dt   , interval    1    second);
  select    date_add(   @dt   , interval    1    microsecond);
  select    date_add(   @dt   , interval    1    week);
  select    date_add(   @dt   , interval    1       month   );
  select    date_add(   @dt   , interval    1    quarter);
  select    date_add(   @dt   , interval    1       year   );

  select    date_add(   @dt   , interval    -   1       day   );          --    sub 1 day  
 
MySQL adddate(), addtime()函數,能夠用 date_add() 來替代。下面是 date_add() 實現 addtime() 功能示例:

mysql
  >       set       @dt       =       '   2008-08-09 12:12:33   '   ;

mysql
  >  
mysql
  >       select    date_add(   @dt   , interval    '   01:15:30   '    hour_second);

  +   --   ----------------------------------------------+  
  |    date_add(   @dt   , interval    '   01:15:30   '    hour_second)    |  
  +   --   ----------------------------------------------+  
  |       2008   -   08   -   09       13   :   28   :   03                                  |  
  +   --   ----------------------------------------------+  
 
mysql
  >       select    date_add(   @dt   , interval    '   1 01:15:30   '    day_second);

  +   --   -----------------------------------------------+  
  |    date_add(   @dt   , interval    '   1 01:15:30   '    day_second)    |  
  +   --   -----------------------------------------------+  
  |       2008   -   08   -   10       13   :   28   :   03                                   |  
  +   --   -----------------------------------------------+  
 
date_add() 函數,分別爲 
  @dt    增長了「1小時 15分 30秒」 和 「1天 1小時 15分 30秒」。建議:老是使用 date_add() 日期時間函數來替代 adddate(), addtime()。

  2   . MySQL 爲日期減去一個時間間隔:date_sub()

mysql
  >       select    date_sub(   '   1998-01-01 00:00:00   '   , interval    '   1 1:1:1   '    day_second);

  +   --   --------------------------------------------------------------+  
  |    date_sub(   '   1998-01-01 00:00:00   '   , interval    '   1 1:1:1   '    day_second)    |  
  +   --   --------------------------------------------------------------+  
  |       1997   -   12   -   30       22   :   58   :   59                                                  |  
  +   --   --------------------------------------------------------------+  
 
MySQL date_sub() 日期時間函數 和 date_add() 用法一致,再也不贅述。另外,MySQL 中還有兩個函數 subdate(), subtime(),建議,用 date_sub() 來替代。

  3   . MySQL 另類日期函數:period_add(P,N), period_diff(P1,P2)

函數參數「P」 的格式爲「YYYYMM」 或者 「YYMM」,第二個參數「N」 表示增長或減去 N 
  month   (月)。

MySQL period_add(P,N):日期加
  /   減去N月。

mysql
  >       select    period_add(   200808   ,   2   ), period_add(   20080808   ,   -   2   )

  +   --   --------------------+-------------------------+  
  |    period_add(   200808   ,   2     |    period_add(   20080808   ,   -   2     |  
  +   --   --------------------+-------------------------+  
  |                     200810       |                      20080806       |  
  +   --   --------------------+-------------------------+  
 
MySQL period_diff(P1,P2):日期 P1
  -   P2,返回 N 個月。

mysql
  >       select    period_diff(   200808     200801   );

  +   --   ---------------------------+  
  |    period_diff(   200808     200801     |  
  +   --   ---------------------------+  
  |                                 7       |  
  +   --   ---------------------------+  
 
在 MySQL 中,這兩個日期函數,通常狀況下不多用到。

  4   . MySQL 日期、時間相減函數:   datediff   (date1,date2), timediff(time1,time2)

MySQL 
  datediff   (date1,date2):兩個日期相減 date1    -    date2,返回天數。

  select       datediff   (   '   2008-08-08   '     '   2008-08-01   '   );     --    7  
  select       datediff   (   '   2008-08-01   '     '   2008-08-08   '   );     --    -7  
 
MySQL timediff(time1,time2):兩個日期相減 time1 
  -    time2,返回 time 差值。

  select    timediff(   '   2008-08-08 08:08:08   '     '   2008-08-08 00:00:00   '   );    --    08:08:08  
  select    timediff(   '   08:08:08   '     '   00:00:00   '   );                          --    08:08:08  
 
注意:timediff(time1,time2) 函數的兩個參數類型必須相同。
4、MySQL 日期轉換函數、時間轉換函數

  1   . MySQL (時間、秒)轉換函數:time_to_sec(time), sec_to_time(seconds)

  select    time_to_sec(   '   01:00:05   '   );     --    3605  
  select    sec_to_time(   3605   );           --    '01:00:05'  
 
  2   . MySQL (日期、天數)轉換函數:to_days(date), from_days(days)

  select    to_days(   '   0000-00-00   '   );     --    0  
  select    to_days(   '   2008-08-08   '   );     --    733627  
 
  select    from_days(   0   );              --    '0000-00-00'  
  select    from_days(   733627   );         --    '2008-08-08'  
 
  3   . MySQL    Str       to    Date (字符串轉換爲日期)函數:str_to_date(   str   , format)

  select    str_to_date(   '   08/09/2008   '     '   %m/%d/%Y   '   );                      --    2008-08-09  
  select    str_to_date(   '   08/09/08   '     ,    '   %m/%d/%y   '   );                      --    2008-08-09  
  select    str_to_date(   '   08.09.2008   '     '   %m.%d.%Y   '   );                      --    2008-08-09  
  select    str_to_date(   '   08:09:30   '     '   %h:%i:%s   '   );                        --    08:09:30  
  select    str_to_date(   '   08.09.2008 08:09:30   '     '   %m.%d.%Y %h:%i:%s   '   );    --    2008-08-09 08:09:30  
 
能夠看到,str_to_date(
  str   ,format) 轉換函數,能夠把一些雜亂無章的字符串轉換爲日期格式。另外,它也能夠轉換爲時間。「format」 能夠參看 MySQL 手冊。

  4   . MySQL Date   /   Time    to       Str   (日期   /   時間轉換爲字符串)函數:date_format(date,format), time_format(time,format)

mysql
  >       select    date_format(   '   2008-08-08 22:23:00   '     '   %W %M %Y   '   );

  +   --   ----------------------------------------------+  
  |    date_format(   '   2008-08-08 22:23:00   '     '   %W %M %Y   '     |  
  +   --   ----------------------------------------------+  
  |    Friday August    2008                                   |  
  +   --   ----------------------------------------------+  
 
mysql
  >       select    date_format(   '   2008-08-08 22:23:01   '     '   %Y%m%d%H%i%s   '   );

  +   --   --------------------------------------------------+  
  |    date_format(   '   2008-08-08 22:23:01   '     '   %Y%m%d%H%i%s   '     |  
  +   --   --------------------------------------------------+  
  |       20080808222301                                           |  
  +   --   --------------------------------------------------+  
 
mysql
  >       select    time_format(   '   22:23:01   '     '   %H.%i.%s   '   );

  +   --   -----------------------------------+  
  |    time_format(   '   22:23:01   '     '   %H.%i.%s   '     |  
  +   --   -----------------------------------+  
  |       22.23   .   01                                  |  
  +   --   -----------------------------------+  
 
MySQL 日期、時間轉換函數:date_format(date,format), time_format(time,format) 可以把一個日期
  /   時間轉換成各類各樣的字符串格式。它是 str_to_date(   str   ,format) 函數的 一個逆轉換。

  5   . MySQL 得到國家地區時間格式函數:get_format()

MySQL get_format() 語法:

get_format(date
  |   time   |   datetime     '   eur   '   |   '   usa   '   |   '   jis   '   |   '   iso   '   |   '   internal   '  

MySQL get_format() 用法的所有示例:

  select    get_format(date,   '   usa   '   )          ;      --    '%m.%d.%Y'  
  select    get_format(date,   '   jis   '   )          ;      --    '%Y-%m-%d'  
  select    get_format(date,   '   iso   '   )          ;      --    '%Y-%m-%d'  
  select    get_format(date,   '   eur   '   )          ;      --    '%d.%m.%Y'  
  select    get_format(date,   '   internal   '   )     ;      --    '%Y%m%d'  
  select    get_format(   datetime   ,   '   usa   '   )      ;      --    '%Y-%m-%d %H.%i.%s'  
  select    get_format(   datetime   ,   '   jis   '   )      ;      --    '%Y-%m-%d %H:%i:%s'  
  select    get_format(   datetime   ,   '   iso   '   )      ;      --    '%Y-%m-%d %H:%i:%s'  
  select    get_format(   datetime   ,   '   eur   '   )      ;      --    '%Y-%m-%d %H.%i.%s'  
  select    get_format(   datetime   ,   '   internal   '   ) ;      --    '%Y%m%d%H%i%s'  
  select    get_format(time,   '   usa   '   )          ;      --    '%h:%i:%s %p'  
  select    get_format(time,   '   jis   '   )          ;      --    '%H:%i:%s'  
  select    get_format(time,   '   iso   '   )          ;      --    '%H:%i:%s'  
  select    get_format(time,   '   eur   '   )          ;      --    '%H.%i.%s'  
  select    get_format(time,   '   internal   '   )     ;      --    '%H%i%s'  
 
MySQL get_format() 函數在實際中用到機會的比較少。

  6   . MySQL 拼湊日期、時間函數:makdedate(   year   ,dayofyear), maketime(hour,minute,second)

  select    makedate(   2001   ,   31   );      --    '2001-01-31'  
  select    makedate(   2001   ,   32   );      --    '2001-02-01'  
 
  select    maketime(   12   ,   15   ,   30   );     --    '12:15:30'  
 
5、MySQL 時間戳(
  Timestamp   )函數

  1   . MySQL 得到當前時間戳函數:   current_timestamp     current_timestamp   ()

mysql
  >       select       current_timestamp     current_timestamp   ();

  +   --   -------------------+---------------------+  
  |       current_timestamp         |       current_timestamp   ()    |  
  +   --   -------------------+---------------------+  
  |       2008   -   08   -   09       23   :   22   :   24       |       2008   -   08   -   09       23   :   22   :   24       |  
  +   --   -------------------+---------------------+  
 
  2   . MySQL (Unix 時間戳、日期)轉換函數:

unix_timestamp(),
unix_timestamp(date),
from_unixtime(unix_timestamp),
from_unixtime(unix_timestamp,format)

下面是示例:

  select    unix_timestamp();                          --    1218290027  
  select    unix_timestamp(   '   2008-08-08   '   );              --    1218124800  
  select    unix_timestamp(   '   2008-08-08 12:30:00   '   );     --    1218169800  
 
  select    from_unixtime(   1218290027   );                 --    '2008-08-09 21:53:47'  
  select    from_unixtime(   1218124800   );                 --    '2008-08-08 00:00:00'  
  select    from_unixtime(   1218169800   );                 --    '2008-08-08 12:30:00'  
 
  select    from_unixtime(   1218169800     '   %Y %D %M %h:%i:%s %x   '   );    --    '2008 8th August 12:30:00 2008'  
 
  3   . MySQL 時間戳(   timestamp   )轉換、增、減函數:

  timestamp   (date)                                        --    date to timestamp  
  timestamp   (dt,time)                                     --    dt + time  
  timestampadd(unit,interval,datetime_expr)              --
  timestampdiff(unit,datetime_expr1,datetime_expr2)      --
 
請看示例部分:

  select       timestamp   (   '   2008-08-08   '   );                            --    2008-08-08 00:00:00  
  select       timestamp   (   '   2008-08-08 08:00:00   '     '   01:01:01   '   );       --    2008-08-08 09:01:01  
  select       timestamp   (   '   2008-08-08 08:00:00   '     '   10 01:01:01   '   );    --    2008-08-18 09:01:01  
 
  select    timestampadd(   day     1     '   2008-08-08 08:00:00   '   );        --    2008-08-09 08:00:00  
  select    date_add(   '   2008-08-08 08:00:00   '   , interval    1       day   );    --    2008-08-09 08:00:00  
 
MySQL timestampadd() 函數相似於 date_add()。

  select    timestampdiff(   year   ,   '   2002-05-01   '   ,   '   2001-01-01   '   );                       --    -1  
  select    timestampdiff(   day    ,   '   2002-05-01   '   ,   '   2001-01-01   '   );                       --    -485  
  select    timestampdiff(hour,   '   2008-08-08 12:00:00   '   ,   '   2008-08-08 00:00:00   '   );     --    -12  
 
  select       datediff   (   '   2008-08-08 12:00:00   '     '   2008-08-01 00:00:00   '   );              --    7  
 
MySQL timestampdiff() 函數就比 
  datediff   () 功能強多了,   datediff   () 只能計算兩個日期(date)之間相差的天數。
6、MySQL 時區(timezone)轉換函數

convert_tz(dt,from_tz,to_tz)

  select    convert_tz(   '   2008-08-08 12:00:00   '     '   +08:00   '     '   +00:00   '   );    --    2008-08-08 04:00:00  
 
時區轉換也能夠經過 date_add, date_sub, timestampadd 來實現。

  select    date_add(   '   2008-08-08 12:00:00   '   , interval    -   8    hour);     --    2008-08-08 04:00:00  
  select    date_sub(   '   2008-08-08 12:00:00   '   , interval     8    hour);     --    2008-08-08 04:00:00  
  select    timestampadd(hour,    -   8     '   2008-08-08 12:00:00   '   );         --    2008-08-08 04:00:00  mysql

相關文章
相關標籤/搜索