h2 中的 CURRENT_TIMESTAMP 以毫秒为单位

Posted

技术标签:

【中文标题】h2 中的 CURRENT_TIMESTAMP 以毫秒为单位【英文标题】:CURRENT_TIMESTAMP in milliseconds in h2 【发布时间】:2015-06-08 23:34:05 【问题描述】:

问题CURRENT_TIMESTAMP in milliseconds 讨论了如何“从mysqlPostgreSql 中的时间戳中获取毫秒数”。但是答案中的方法不起作用,因为H2不支持conv之类的MySQL方法。

我想为我的架构文件的defaultValueComputed 使用CURRENT_TIMESTAMP 的变体。

如何获得H2 中时间戳的精确毫秒数?我希望它是long。我还希望返回的毫秒数为Unix time。

它在我的架构文件中:

<column name="create_time" type="long" defaultValueComputed="?"
    <constraints nullable="false"/>
</column>

我有这个DAO 对象:

public interface MyDao extends Transactional<MyDao> 
    @SqlUpdate(
        "INSERT INTO my_table "(id, create_time)" +
        "VALUES (:id, :create_time)"
    void insert(@BindBean MyObject myObject);

我查看了 http://www.h2database.com/html/functions.html 的“时间和日期函数”部分,但找不到任何可以做到这一点的东西,尽管 PARSEDATETIME 可能会起作用。

编辑:也许别名是可能的。请参阅 groups.google.com/forum/#!topic/h2-database/kziTTTNlB9o:

我正在将一个最初为 MySQL 编写的应用程序移植到 H2 (查询包含一些特定于 MySQL 的语法)。应该是最 使查询在 H2 上运行的具有挑战性的部分是使用 MySQL 日期函数,如 DATE()、UNIX_TIMESTAMP() 和 FROM_UNIXTIME()。好消息是:因为 H2 支持创建 这些的别名,我能够编写一个非常小的 Java 类 为 H2 实现这些 MySQL 函数,一旦我将它们别名为 地方,H2 几乎无需修改即可运行我们所有的查询。

【问题讨论】:

***.com/questions/17293598/… 别名的一个很好的例子。 还有playframework.com/documentation/2.2.0/…。 还有另一个别名引用h2database.com/html/grammar.html#create_alias。 【参考方案1】:

我知道这是一个老问题,但任何像我这样的人都可以搜索这个问题的答案。我们可以通过h2DATEDIFF()函数获取当前时间,以毫秒为单位。

首先,我们将 current_timestamp 和第一个日期值和返回类型 SECOND 作为参数传递,例如: DATEDIFF('SECOND', DATE '1970-01-01', CURRENT_TIMESTAMP()) * 1000返回的结果是我们当前时间的毫秒数。

【讨论】:

我已经尝试过了,但它似乎并不准确 - 结果与实际的 Unix 时间戳之间存在微小差异。 您能提供代码示例吗?实际上,这个逻辑做了简单的事情。也许您正试图找到秒而不是毫秒。 所以使用您的答案时的区别在于我获得了本地时区的时间戳(在我的情况下为 GMT+3),因此它与 Unix 时间戳(以百万为单位)不同。在我的回答中,我得到了 UTC 的结果。 代码示例 - jdbcTemplate.queryForObject("select DATEDIFF('SECOND', DATE '1970-01-01', CURRENT_TIMESTAMP()) * 1000", Long.class)【参考方案2】:

我在这里尝试了另一个答案,但它并不准确 - 结果与实际的 Unix 时间戳之间存在微小差异。

不过,这似乎可行:

SELECT EXTRACT (EPOCH from CURRENT_TIMESTAMP()) * 1000

似乎在另一个答案中,我得到了本地时区的时间戳(在我的情况下为 GMT+3),因此它与 Unix 时间戳(以毫秒为单位)不同。在我的回答中,我得到了 UTC 的结果。

【讨论】:

以上是关于h2 中的 CURRENT_TIMESTAMP 以毫秒为单位的主要内容,如果未能解决你的问题,请参考以下文章

无法从 SQL Server 中的 CURRENT_TIMESTAMP 获取秒数

CURRENT_TIMESTAMP 以毫秒为单位

如何在 h2 中找到时间戳超过 120 天的所有记录

如何通过 python 将 current_timestamp 插入 Postgres

如何处理mysql中的时间戳读取问题

如何处理mysql中的时间戳读取问题