在Presto中将bigint类型转换为指定格式的timestamp
嘿,这个问题我刚好处理过!先看你给的Col2数据,都是16位的数字,这大概率是微秒级的Unix时间戳(就是从1970-01-01 00:00:00 UTC开始累计的微秒数)。下面分几种常用数据库给你对应的转换方法:
1. MySQL/MariaDB 转换方法
用FROM_UNIXTIME()函数,先把微秒数除以1000000转成秒级时间戳,再指定你要的格式:
SELECT Col1, FROM_UNIXTIME(Col2 / 1000000, '%Y-%m-%d %H:%i:%s') AS formatted_time FROM your_table;
如果后续需要保留微秒精度,把格式里加上%f就行,比如'%Y-%m-%d %H:%i:%s.%f'。
2. PostgreSQL 转换方法
用TO_TIMESTAMP()把秒级时间戳转成timestamp类型,再用TO_CHAR()格式化:
SELECT Col1, TO_CHAR(TO_TIMESTAMP(Col2 / 1000000), 'YYYY-MM-DD HH24:MI:SS') AS formatted_time FROM your_table;
这里HH24是24小时制,如果你需要12小时制可以换成HH12,再加AM/PM标识。
3. SQL Server 转换方法
SQL Server里直接用DATEADD()把微秒数加到Unix时间基准点(1970-01-01 00:00:00),再用FORMAT()输出格式:
SELECT Col1, FORMAT(DATEADD(microsecond, Col2, '1970-01-01 00:00:00'), 'yyyy-MM-dd HH:mm:ss') AS formatted_time FROM your_table;
快速验证时间戳类型
拿你第一个数据1519778444938790来验证:除以1000000得到1519778444.93879,对应UTC时间是2018-03-01 08:00:44,转成北京时间是2018-03-01 16:00:44,你可以核对下业务数据是否符合这个时间范围,确认是不是微秒级时间戳。
内容的提问来源于stack exchange,提问作者Nick Knauer
相关产品推荐
相关产品推荐

