本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
日期和时间函数
日期与时间戳的转换
| 函数 | 用法 |
|---|
| UNIX_TIMESTAMP() | 以UNIX时间戳的形式返回当前时间。SELECT UNIX_TIMESTAMP() ->1634348884 |
| UNIX_TIMESTAMP(date) | 将时间date以UNIX时间戳的形式返回。 |
| FROM_UNIXTIME(timestamp) | 将UNIX时间戳的时间转换为普通格式的时间 |
mysql> SELECT UNIX_TIMESTAMP(now());
+
| UNIX_TIMESTAMP(now()) |
+
| 1576380910 |
+
1 row in set (0.01 sec)
mysql> SELECT UNIX_TIMESTAMP(CURDATE());
+
| UNIX_TIMESTAMP(CURDATE()) |
+
| 1576339200 |
+
1 row in set (0.00 sec)
mysql> SELECT UNIX_TIMESTAMP(CURTIME());
+
| UNIX_TIMESTAMP(CURTIME()) |
+
| 1576380969 |
+
1 row in set (0.00 sec)
mysql> SELECT UNIX_TIMESTAMP('2011-11-11 11:11:11')
+
| UNIX_TIMESTAMP('2011-11-11 11:11:11') |
+
| 1320981071 |
+
1 row in set (0.00 sec)
mysql> SELECT FROM_UNIXTIME(1576380910);
+
| FROM_UNIXTIME(1576380910) |
+
| 2019-12-15 11:35:10 |
+
1 row in set (0.00 sec)
日期的操作函数
| 函数 | 用法 |
|---|
| EXTRACT(type FROM date) | 返回指定日期中特定的部分,type指定返回的值 |
EXTRACT(type FROM date)函数中type的取值与含义:
SELECT EXTRACT(MINUTE FROM NOW()),EXTRACT( WEEK FROM NOW()),
EXTRACT( QUARTER FROM NOW()),EXTRACT( MINUTE_SECOND FROM NOW())
FROM DUAL;
时间和秒钟转换的函数
| 函数 | 用法 |
|---|
| TIME_TO_SEC(time) | 将 time 转化为秒并返回结果值。转化的公式为:小时*3600+分钟*60+秒 |
| SEC_TO_TIME(seconds) | 将 seconds 描述转化为包含小时、分钟和秒的时间 |
mysql> SELECT TIME_TO_SEC(NOW());
+
| TIME_TO_SEC(NOW()) |
+
| 78774 |
+
1 row in set (0.00 sec)
mysql> SELECT SEC_TO_TIME(78774);
+
| SEC_TO_TIME(78774) |
+
| 21:52:54 |
+
1 row in set (0.12 sec)
日期的格式化与解析
| 函数 | 用法 |
|---|
| DATE_FORMAT(date,fmt) | 按照字符串fmt格式化日期date值 |
| TIME_FORMAT(time,fmt) | 按照字符串fmt格式化时间time值 |
| GET_FORMAT(date_type,format_type) | 返回日期字符串的显示格式 |
| STR_TO_DATE(str, fmt) | 按照字符串fmt对str进行解析,解析为一个日期 |
上述非GET_FORMAT函数中fmt参数常用的格式符:
| 格式符 | 说明 | 格式符 | 说明 |
|---|
| %Y | 4位数字表示年份 | %y | 表示两位数字表示年份 |
| %M | 月名表示月份(January,....) | %m | 两位数字表示月份(01,02,03。。。) |
| %b | 缩写的月名(Jan.,Feb.,....) | %c | 数字表示月份(1,2,3,...) |
| %D | 英文后缀表示月中的天数(1st,2nd,3rd,...) | %d | 两位数字表示月中的天数(01,02...) |
| %e | 数字形式表示月中的天数(1,2,3,4,5.....) | | |
| %H | 两位数字表示小数,24小时制(01,02..) | %h和%I | 两位数字表示小时,12小时制(01,02..) |
| %k | 数字形式的小时,24小时制(1,2,3) | %l | 数字形式表示小时,12小时制(1,2,3,4....) |
| %i | 两位数字表示分钟(00,01,02) | %S和%s | 两位数字表示秒(00,01,02...) |
| %W | 一周中的星期名称(Sunday...) | %a | 一周中的星期缩写(Sun.,Mon.,Tues.,..) |
| %w | 以数字表示周中的天数(0=Sunday,1=Monday....) | | |
| %j | 以3位数字表示年中的天数(001,002...) | %U | 以数字表示年中的第几周,(1,2,3。。)其中Sunday为周中第一天 |
| %u | 以数字表示年中的第几周,(1,2,3。。)其中Monday为周中第一天 | | |
| %T | 24小时制 | %r | 12小时制 |
| %p | AM或PM | %% | 表示% |
GET_FORMAT函数中date_type和format_type参数取值如下:
mysql> SELECT DATE_FORMAT(NOW(), '%H:%i:%s');
+
| DATE_FORMAT(NOW(), '%H:%i:%s') |
+
| 22:57:34 |
+
1 row in set (0.00 sec)
SELECT STR_TO_DATE('09/01/2009','%m/%d/%Y')
FROM DUAL;
SELECT STR_TO_DATE('20140422154706','%Y%m%d%H%i%s')
FROM DUAL;
SELECT STR_TO_DATE('2014-04-22 15:47:06','%Y-%m-%d %H:%i:%s')
FROM DUAL;
mysql> SELECT GET_FORMAT(DATE, 'USA');
+
| GET_FORMAT(DATE, 'USA') |
+
| %m.%d.%Y |
+
1 row in set (0.00 sec)
SELECT DATE_FORMAT(NOW(),GET_FORMAT(DATE,'USA')),
FROM DUAL;
mysql> SELECT STR_TO_DATE('2020-01-01 00:00:00','%Y-%m-%d');
+
| STR_TO_DATE('2020-01-01 00:00:00','%Y-%m-%d') |
+
| 2020-01-01 |
+
1 row in set, 1 warning (0.00 sec)