GaussDB(DWS)中的Unix时间戳【这次高斯不是数学家】
unix时间戳
unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp)
是指UTC标准时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数,不考虑闰秒。
在大多数的UNIX系统中UNIX时间戳存储为32位,这样会引发2038年问题或Y2038,解决方案是转为64位存储。
时间戳获取方法
GaussDB(DWS) 在8.1.2版本之前获取unix时间戳的方式如下
SELECT extract(epoch FROM now()) ;
自8.1.2版本开始,可使用unix_timestamp函数获取当前时间戳
SELECT unix_timestamp() ;
时间戳相关函数
MySQL数据库中,支持unix时间戳和日期类型的相互转换,范围为’1970-01-01 00:00:01.000000’UTC到’2038-01-19 03:14:07.999999’ UTC。
GaussDB(DWS)自8.1.2版本开始,兼容并拓展MySQL的unix时间戳的相关函数,并使用64位存储,上限不再受制于’2038-01-19 03:14:07.999999’ UTC,避免2038年问题。
1、unix_timestamp函数
unix_timestamp() :将当前日期时间格式化成时间戳
unix_timestamp(timestamp) :将输入的日期时间格式化成时间戳
postgres=# SELECT unix_timestamp();
unix_timestamp
----------------
1633677293
(1 row)
postgres=# SELECT unix_timestamp('2021-10-01 10:12:23.123789+06');
unix_timestamp
-------------------
1633061543.123789
(1 row)
postgres=# SELECT unix_timestamp('3000-10-01 10:12:23');
unix_timestamp
--------------------
32527275143.000000
(1 row)
2、from_unixtime函数
from_unixtime(unix_timestamp) :将时间戳转成日期时间
from_unixtime(unix_timestamp, format) :将时间戳转成日期时间字符串
参数unix_timestamp要求为整数,且单位为秒。 如果从业务系统拿到的时间戳格式的时间单位为毫秒,则需要先将它转化为秒。
postgres=# SELECT from_unixtime(1633677293);
from_unixtime
---------------------
2021-10-08 15:14:53
(1 row)
postgres=# SELECT from_unixtime(1633061543.123789, '%Y %D %M %h:%i:%s.%f');
from_unixtime
----------------------------------
2021 1st October 12:12:23.123789
(1 row)
小结
个人认为,GaussDB(DWS)对Unix时间戳函数的支持还是比较好的,一方面考虑了对于MySQL数据库的兼容,另一方面解决了32位时间戳的上限问题,同时也填补了GaussDB(DWS)自身对于时间戳函数的缺失,一举三得。
【这次高斯不是数学家】有奖征文火热进行中:https://bbs.huaweicloud.com/blogs/351189
- 点赞
- 收藏
- 关注作者
评论(0)