我可以执行一个简单的更新语句来更新 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)
此解决方案的唯一问题是,如果您的时间戳有 100 微秒部分,它就无法正常工作,如 DATEADD
的文档所示。状态:
<amount>
::= an integer expression (negative to subtract)
而 100 微秒部分是数量的小数部分,不能这样更改。我已提交工单 CORE-4457改变这一点,从 Firebird 3 开始,
DATEADD(... MILLISECOND TO ...)
现在将接受一个小数值。然而,由于许多客户端库仅使用或支持毫秒精度,这可能不会影响您(即使内置的
CURRENT_TIME
和 CURRENT_TIMESTAMP
也仅限于毫秒精度)。
关于timestamp - 如何更新 firebird 时间戳字段以删除毫秒部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24118608/