时间戳格式有利于提高查询效率,但不利于肉眼确定具体时间,MySQL 提供了相关函数用于时间戳与时间格式的相互转换,我们可以在查询的时候做一些相应的转化来显示时间……
时间戳转时间格式
MySQL 提供了一个时间戳格式化函数from_unixtime
,语法说明如下:
1
| from_unixtime(unix_timestamp, format)
|
返回表示 Unix 时间标记的一个字符串,根据format
字符串格式化,如果format
为空默认会使用%Y-%m-%d %H:%i:%s
的格式,示例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| mysql> select from_unixtime(1586418059); +---------------------------+ | from_unixtime(1586418059) | +---------------------------+ | 2020-04-09 07:40:59 | +---------------------------+ 1 row in set (0.00 sec)
mysql> select from_unixtime(1586418059, '%Y-%m-%d %H:%i:%s'); +------------------------------------------------+ | from_unixtime(1586418059, '%Y-%m-%d %H:%i:%s') | +------------------------------------------------+ | 2020-04-09 07:40:59 | +------------------------------------------------+ 1 row in set (0.00 sec)
|
转换前 Unix时间戳不能确定时间:
1 2 3 4 5 6 7 8 9
| mysql> select id,create_time from user limit 3; +-------+-------------+ | id | create_time | +-------+-------------+ | 56635 | 1576109820 | | 62381 | 1577317200 | | 66356 | 1578024600 | +-------+-------------+ 3 rows in set (0.00 sec)
|
转换后可以很轻松的确定时间:
1 2 3 4 5 6 7 8 9
| mysql> select id,from_unixtime(create_time) as create_time from user limit 3; +-------+---------------------+ | id | create_time | +-------+---------------------+ | 56635 | 2019-12-12 00:17:00 | | 62381 | 2019-12-25 23:40:00 | | 66356 | 2020-01-03 04:10:00 | +-------+---------------------+ 3 rows in set (0.00 sec)
|
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 位 |
时间格式转时间戳
MySQL 提供了一个后去时间戳函数unix_timestamp
,语法说明如下:
1
| UNIX_TIMESTAMP(); UNIX_TIMESTAMP(date);
|
返回以秒表示的Unix时间戳,
参数data
可以是: DATE
, DATETIME
, TIMESTAMP
以及 YYYYMMDD 或 YYMMDD 格式的数字
示例:
1 2 3 4 5 6 7 8
| mysql> select unix_timestamp(); +------------------+ | unix_timestamp() | +------------------+ | 1586421649 | +------------------+ 1 row in set (0.00 sec)
|
1 2 3 4 5 6 7
| mysql> select unix_timestamp('2020-04-09 08:12:34'); +---------------------------------------+ | unix_timestamp('2020-04-09 08:12:34') | +---------------------------------------+ | 1586419954 | +---------------------------------------+ 1 row in set (0.00 sec)
|
1 2 3 4 5 6 7
| mysql> select unix_timestamp(20200409); +--------------------------+ | unix_timestamp(20200409) | +--------------------------+ | 1586390400 | +--------------------------+ 1 row in set (0.00 sec)
|