gpt4 book ai didi

sql - 将 Firebird 数据库中的 DOUBLE 列转换为 TIMESTAMP

转载 作者:行者123 更新时间:2023-12-04 20:59:42 25 4
gpt4 key购买 nike

我有一个 Firebird 数据库,它将日期时间字段保存为 DOUBLE。我已经创建了 ColdFusion 数据源连接,因此我可以远程查询数据。虽然其余数据正确返回,但日期时间字段不可读。我尝试使用 CAST 和 CONVERT 但没有成功。如何将其转换为时间戳?

存储的数据示例为:43016.988360

最佳答案

如果没有明确定义您希望如何映射并自己编写该转换(或者希望有一个现有的第三方 UDF 可以为您执行此操作)。

Firebird 中的 TIMESTAMP 是表示为 8 字节值的日期 + 时间,其中日期范围是从公元 1 月 1 日开始。至公元9999年12月31日时间范围是 00:00 到 23:59.9999(因此,100 微秒精度)。

DOUBLE PRECISION 通常是存储日期和时间信息的错误类型,并且由于您没有提供如何解释该 double 值,因此我们无法为您提供帮助,除了说:Firebird 中没有默认方法可以执行此操作。

根据下面的评论,该值看起来像是一个以 double 形式存储的 ColdFusion 日期值,包含自 1899 年 12 月 30 日以来的天数,另请参阅 why is ColdFusion's Epoch Time Dec 30, 1899? 。如果确实如此,那么您可以使用以下内容转换为 TIMESTAMP:

select timestamp'1899-12-30 00:00' + 43016.988360 from rdb$database

这将产生值 2017-10-08 23:43:14.304。使用评论中的值 43182.4931754 将产生 2018-03-23 11:50:10.354。这与您的期望相差一毫秒,但这可能是舍入/表示问题,例如,如果我使用 43182.49317539 代替,我会得到确切的预期日期。

我强烈建议您使用已知值仔细测试这一点。

关于sql - 将 Firebird 数据库中的 DOUBLE 列转换为 TIMESTAMP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49536438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com