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

时间:2014-06-09 10:45:44

标签: timestamp firebird

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

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

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

3 个答案:

答案 0 :(得分:4)

Firebird中没有标准功能可以执行此操作。但是,在内置函数EXTRACTDATEADD的帮助下,您将能够构建它。

DATEADD(-1 * EXTRACT(MILLISECOND FROM theTimestamp) MILLISECOND TO theTimestamp)

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

  

<amount> :: =一个整数表达式(负减去)

并且100微秒部分是数量的小数部分,并且不能以这种方式改变。我已经提交了票证CORE-4457以便更改。

然而,由于许多客户端库仅使用或支持毫秒级精度,因此这可能不会影响您(即使内置CURRENT_TIMECURRENT_TIMESTAMP仅限于毫秒级精度)。

答案 1 :(得分:1)

您可以使用EXTRACT()内部功能。

答案 2 :(得分:1)

v_TimeIn = cast(extract(Hour from v_TimeIn)||':'||
    extract(minute from v_TimeIn) as Time);