時間函數對應mysql版本5.7,低版本未測
1、擷取目前日期的函數,傳回格式"YYYY-MM-DD"
mysql> select curdate(),current_date();
+------------+----------------+
| curdate() | current_date() |
+------------+----------------+
| 2019-10-30 | 2019-10-30 |
+------------+----------------+
1 row in set (0.05 sec)
2、擷取目前日期的函數,傳回格式"YYYY-MM-DD HH:MM:SS"
mysql> select now(),sysdate(),current_timestamp(),localtime();
+---------------------+---------------------+---------------------+---------------------+
| now() | sysdate() | current_timestamp() | localtime() |
+---------------------+---------------------+---------------------+---------------------+
| 2019-10-30 14:03:46 | 2019-10-30 14:03:46 | 2019-10-30 14:03:46 | 2019-10-30 14:03:46 |
+---------------------+---------------------+---------------------+---------------------+
1 row in set (0.11 sec)
3、UNIX時間戳函數
mysql> select unix_timestamp(),unix_timestamp(now()),now();
+------------------+-----------------------+---------------------+
| unix_timestamp() | unix_timestamp(now()) | now() |
+------------------+-----------------------+---------------------+
| 1572418048 | 1572418048 | 2019-10-30 14:47:28 |
+------------------+-----------------------+---------------------+
1 row in set (0.11 sec)
from_unixtime與unix_timestamp為互反函數
mysql> select from_unixtime(1572418048);
+---------------------------+
| from_unixtime(1572418048) |
+---------------------------+
| 2019-10-30 14:47:28 |
+---------------------------+
1 row in set (0.10 sec)
4、傳回UTC日期和時間的函數
mysql> select utc_date(),utc_time();
+------------+------------+
| utc_date() | utc_time() |
+------------+------------+
| 2019-10-30 | 06:56:44 |
+------------+------------+
1 row in set (0.09 sec)
5、擷取月份的函數
MONTH(date)函數傳回對應的月份,MONTHNAME(date)傳回月份對應的英文
mysql> select month('2019-10-30'),monthname('2019-10-30');
+---------------------+-------------------------+
| month('2019-10-30') | monthname('2019-10-30') |
+---------------------+-------------------------+
| 10 | October |
+---------------------+-------------------------+
1 row in set (0.09 sec)
6、擷取星期的函數
dayname(d)函數傳回d對應的工作日的英文名稱
dayofweek(d)傳回日期所在周的索引
mysql> select dayname('2019-10-30'),dayofweek('2019-10-30');
+-----------------------+-------------------------+
| dayname('2019-10-30') | dayofweek('2019-10-30') |
+-----------------------+-------------------------+
| Wednesday | 4 |
+-----------------------+-------------------------+
1 row in set (0.10 sec)
7、擷取星期數的函數
week(d,default_week_format)預設值是0,指定一周的第一天為周日,1則指定一周的第一天為周一
weekofyear(d)某天位于一年中的第幾周,相當于week(d,3)
mysql> select week('2019-10-30'),weekofyear('2019-10-30');
+--------------------+--------------------------+
| week('2019-10-30') | weekofyear('2019-10-30') |
+--------------------+--------------------------+
| 43 | 44 |
+--------------------+--------------------------+
1 row in set (0.13 sec)
mysql> select week('2019-10-30',1),weekofyear('2019-10-30');
+----------------------+--------------------------+
| week('2019-10-30',1) | weekofyear('2019-10-30') |
+----------------------+--------------------------+
| 44 | 44 |
+----------------------+--------------------------+
1 row in set (0.09 sec)
8、擷取天數的函數
dayofyear(d) 一年中的第幾天
dayofmonth(d)一個月中的第幾天
mysql> select dayofmonth('2019-10-30'),dayofyear('2019-10-30');
+--------------------------+-------------------------+
| dayofmonth('2019-10-30') | dayofyear('2019-10-30') |
+--------------------------+-------------------------+
| 30 | 303 |
+--------------------------+-------------------------+
1 row in set (0.09 sec)
9、擷取年份、季度、小時、分鐘和秒鐘的函數
mysql> select year('2019-10-30 14:47:28'),quarter('2019-10-30 14:47:28'),minute('2019-10-30 14:47:28'),second('2019-10-30 14:47:28');
+-----------------------------+--------------------------------+-------------------------------+-------------------------------+
| year('2019-10-30 14:47:28') | quarter('2019-10-30 14:47:28') | minute('2019-10-30 14:47:28') | second('2019-10-30 14:47:28') |
+-----------------------------+--------------------------------+-------------------------------+-------------------------------+
| 2019 | 4 | 47 | 28 |
+-----------------------------+--------------------------------+-------------------------------+-------------------------------+
1 row in set (0.11 sec)
10、時間和秒鐘轉換的函數
time_to_sec(time)
sec_to_time(second)
mysql> select time_to_sec('14:47:28'),sec_to_time(53248);
+-------------------------+--------------------+
| time_to_sec('14:47:28') | sec_to_time(53248) |
+-------------------------+--------------------+
| 53248 | 14:47:28 |
+-------------------------+--------------------+
1 row in set (0.10 sec)
11、計算日期和時間的函數
date_add(date,interval expr type)
adddate(date,interval expr type)
date_sub(date,interval expr type)
subdate(date,interval expr type)
addtime(date,expr)
subtime(date,expr)
datediff() 兩個日期的間隔天數
type值 | 預期的expr格式 |
---|---|
MICROSECOND | MICROSECONDS |
SECOND | SECONDS |
MINUTE | MINUTES |
HOUR | HOURS |
DAY | DAYS |
WEEK | WEEKS |
MONTH | MONTHS |
QUARTER | QUARTERS |
YEAR | YEARS |
SECOND_MICROSECOND | 'SECONDS.MICROSECONDS' |
MINUTE_MICROSECOND | 'MINUTES.MICROSECONDS' |
MINUTE_SECOND | 'MINUTES:SECONDS' |
HOUR_MICROSECOND | 'HOUR.MICROSECONDS' |
HOUR_SECOND | 'HOURS:MINUTES:SECONDS' |
HOUR_MINUTE | 'HOURS:MINUTES' |
DAY_MICROSECOND | 'DAYS:MICROSECONDS' |
DAY_SECOND | 'DAYS HOURS:MINUTES:SECONDS' |
DAY_MINUTE | 'DAYS HOURS:MINUTES' |
DAY_HOUR | 'DAYS HOURS' |
YEAR_MONTH | 'YEARS-MONTHS' |
舉例:使用三個type值 day,second,year_month 其他類比
mysql> select date_sub('2019-10-30',interval 10 day),date_sub('2019-10-30 14:47:28',interval 10 second),date_add('2019-10-30 14:47:28',interval '1_1' year_month);
+----------------------------------------+----------------------------------------------------+-----------------------------------------------------------+
| date_sub('2019-10-30',interval 10 day) | date_sub('2019-10-30 14:47:28',interval 10 second) | date_add('2019-10-30 14:47:28',interval '1_1' year_month) |
+----------------------------------------+----------------------------------------------------+-----------------------------------------------------------+
| 2019-10-20 | 2019-10-30 14:47:18 | 2020-11-30 14:47:28 |
+----------------------------------------+----------------------------------------------------+-----------------------------------------------------------+
addtime
mysql> select addtime('2019-10-30 14:47:28','1:1:1'),addtime('14:47:28','1:1:1');
+----------------------------------------+-----------------------------+
| addtime('2019-10-30 14:47:28','1:1:1') | addtime('14:47:28','1:1:1') |
+----------------------------------------+-----------------------------+
| 2019-10-30 15:48:29 | 15:48:29 |
+----------------------------------------+-----------------------------+
1 row in set (0.09 sec)
datediff
mysql> select datediff('2019-10-30 14:47:28','2019-09-23 10:27:18');
+-------------------------------------------------------+
| datediff('2019-10-30 14:47:28','2019-09-23 10:27:18') |
+-------------------------------------------------------+
| 37 |
+-------------------------------------------------------+
1 row in set (0.10 sec)
12、将日期時間格式化的函數
date_format(date,format)
說明符 | 說明 |
---|---|
%a | 工作日的縮寫名稱(Sun...Sat) |
%b | 月份的縮寫名稱(Jan...Dec) |
%c | 月份、數字形式 |
%D | 帶有英語字尾的該月日期 |
%d | 該月日期,數字形式 |
%e | 該月日期,數字形式 |
%f | 微妙 |
%H | 以2位數表示24小時 |
%h | 以2位數表示12小時 |
%i | 分鐘,數字形式 |
%j | 一年中的天數 |
%k | 以24小時表示時間 |
%l | 以12小時表示時間 |
%M | 月份名稱,英文 |
%m | 月份名稱,數字形式 |
%p | 上午AM 或者下午PM |
%r | 時間12小時制 |
%S,%s | 以數字形式表示秒 |
%W | 工作日名稱,中文 |
%w | 一周的工作日,0表示周日 |
%Y | 四位數表示年份 |
%y | 兩位數表示年份 |
%% | ‘%’文字字元 |
mysql> select date_format('2019-10-30 14:47:28','%a %b %c %d %M %m %Y %y');
+--------------------------------------------------------------+
| date_format('2019-10-30 14:47:28','%a %b %c %d %M %m %Y %y') |
+--------------------------------------------------------------+
| Wed Oct 10 30 October 10 2019 19 |
+--------------------------------------------------------------+
1 row in set (0.08 sec)