如何更新firebird时间戳字段以删除毫秒部分?

sra*_*ner 5 firebird timestamp

是否有一个简单的更新语句,我可以执行更新firebird数据库中的时间戳字段以删除毫秒部分.

所以目前的价值是:9-DEC-2013 8:55:57.3560我想将其更新为:9-DEC-2013 8:55:57.0000

我需要一个通用的更新语句,根据旧的时间戳计算新的时间戳.

Mar*_*eel 4

Firebird 中没有标准函数可以执行此操作。然而,借助内置函数EXTRACTDATEADD您将能够构建它。

DATEADD(-1 * EXTRACT(MILLISECOND FROM theTimestamp) MILLISECOND TO theTimestamp)
Run Code Online (Sandbox Code Playgroud)

此解决方案的唯一问题是,如果您的时间戳有 100 微秒部分,则它无法正常工作,如文档所述DATEADD

<amount> ::= 整数表达式(负数相减)

而100微秒部分是金额的小数部分,不能这样改变。我已提交票证CORE-4457来更改此设置,并且从 Firebird 3 开始,DATEADD(... MILLISECOND TO ...)现在将接受小数值。

然而,由于许多客户端库仅使用或支持毫秒精度,这可能不会影响您(即使是内置的CURRENT_TIME并且CURRENT_TIMESTAMP仅限于毫秒精度)。