暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

三种数据库对unix数值型时间戳的处理

数据库精要 2021-09-26
1308

时间戳即unix时间戳:Unix时间戳(英文为Unix epoch, Unix time, POSIX time Unix timestamp)是从197011日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。

  UNIX时间戳的0按照ISO 8601规范为:1970-01-01T00:00:00Z.一个小时表示为UNIX时间戳格式为:3600秒;一天表示为UNIX时间戳为86400秒,闰秒不计算。在大多数的UNIX系统中UNIX时间戳存储为32位,这样会引发2038年问题或Y2038。三种数据库都可以对数值型时间戳进行互相转换。

为什么要使用unix时间戳:

 

在现在的系统中经常遇到跨数据库的应用开发,在数据库系统中不同的数据库对与时间类型却有不同解释,比如ORACLEdateMYSQL里面的date就不能直接兼容转换,数据方面还可以使用数据迁移工具进行转换,

    为了实现垮平台在应用系统中记录时间的时候我们就可以使用记录UNIX时间戳的方法做到垮平台性。另外借助时间戳的转换函数,可以对数据库的时间字段进行加密,增强系统的安全性和保密性。

 

oracle

数字时间戳转日期:

(to_date('19700101','yyyymmdd') +in_number/86400

  +to_number(substr(tz_offset(sessiontimezone),1,3))/24);

 

日期转数字时间戳:

((in_date-to_date('19700101','yyyymmdd'))*86400-

 to_number(substr(tz_offset(sessiontimezone),1,3))*3600)

 

mysql

时间戳转日期:from_unixtime(1490172757);

日期转时间戳:UNIX_TIMESTAMP(datetime);

 

sqlserver

时间戳转日期:DATEADD(S,1490172757 + 8 * 3600,'1970-01-01 00:00:00');

日期转时间戳:

SELECTDATEDIFF(S,'1970-01-01 00:00:00', '2018-10-03 09:04:48.000') - 8 * 3600

扫描下方二维码,移步知识星球,学习更多数据库知识:




文章转载自数据库精要,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论