Firebird中如何将Unix时间转换为datetime类型
Firebird 中实现Unix时间转Datetime的方案
Firebird 没有提供和 MySQL 完全同名的FROM_UNIXTIME内置函数,但可以通过内置日期运算实现完全相同的Unix时间戳到datetime类型的转换效果,不同版本的实现方式如下:
- Firebird 3.0 及以上版本
推荐使用DATEADD函数直接偏移计算,Unix时间戳的本质是从UTC时间1970-01-01 00:00:00开始累计的秒数,参考写法:
如果你需要适配本地时区,可以根据所在时区的偏移量追加时间调整,例如东八区场景可以额外加8小时,或使用内置的-- 将unix_ts字段替换为你存储Unix时间戳的字段即可 SELECT DATEADD(SECOND, unix_ts, TIMESTAMP '1970-01-01 00:00:00') AS convert_result FROM your_table;AT TIME ZONE语法做标准时区转换。 - Firebird 2.5 及更早版本
旧版本可利用Firebird日期类型的数值存储特性(1个单位代表1天)直接做算术运算实现转换,参考写法:-- 注意除数必须写86400.0触发浮点运算,避免整数除法丢失时分秒精度 SELECT TIMESTAMP '1970-01-01 00:00:00' + unix_ts / 86400.0 AS convert_result FROM your_table;
如果日常使用中频繁需要做这个转换,你也可以在库中自定义一个名为FROM_UNIXTIME的自定义函数,入参设为整型的Unix时间戳,内部封装上述转换逻辑,调用时就可以和MySQL的同名函数用法完全一致。
内容的提问来源于stack exchange,提问作者sid_com
相关产品推荐
相关产品推荐

