是否有一个简单的更新语句我可以执行更新firebird数据库中的时间戳字段以删除毫秒部分。
所以目前的价值是:9-DEC-2013 8:55:57.3560 我想将其更新为:9-DEC-2013 8:55:57.0000
我需要一个通用的更新语句,根据旧的时间戳计算新的时间戳。
答案 0 :(得分:4)
Firebird中没有标准功能可以执行此操作。但是,在内置函数EXTRACT
和DATEADD
的帮助下,您将能够构建它。
DATEADD(-1 * EXTRACT(MILLISECOND FROM theTimestamp) MILLISECOND TO theTimestamp)
此解决方案的唯一问题是,如果您的时间戳有100微秒的部分,它就无法正常工作,正如DATEADD
的文档所示:
<amount>
:: =一个整数表达式(负减去)
并且100微秒部分是数量的小数部分,并且不能以这种方式改变。我已经提交了票证CORE-4457以便更改。
然而,由于许多客户端库仅使用或支持毫秒级精度,因此这可能不会影响您(即使内置CURRENT_TIME
和CURRENT_TIMESTAMP
仅限于毫秒级精度)。
答案 1 :(得分:1)
您可以使用EXTRACT()内部功能。
答案 2 :(得分:1)
v_TimeIn = cast(extract(Hour from v_TimeIn)||':'||
extract(minute from v_TimeIn) as Time);