sra*_*ner 5 firebird timestamp
是否有一个简单的更新语句,我可以执行更新firebird数据库中的时间戳字段以删除毫秒部分.
所以目前的价值是:9-DEC-2013 8:55:57.3560我想将其更新为:9-DEC-2013 8:55:57.0000
我需要一个通用的更新语句,根据旧的时间戳计算新的时间戳.
Firebird 中没有标准函数可以执行此操作。然而,借助内置函数EXTRACT,DATEADD您将能够构建它。
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仅限于毫秒精度)。