CURRENT_TIMESTAMP,以毫秒为单位,单位为h2

时间:2015-06-08 23:34:06

标签: mysql timestamp h2

问题CURRENT_TIMESTAMP in milliseconds讨论了如何在MySqlPostgreSql"中的时间戳中获得毫秒数。但是答案中的方法不起作用,因为H2不支持像conv这样的MySQL方法。

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

如何在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);
}

我查看了&#34;时间和日期函数&#34; 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运行几乎所有查询。

2 个答案:

答案 0 :(得分:1)

我知道这是一个老问题,但是像我这样的人,可以搜索这个问题的答案。我们可以使用h2 DATEDIFF()函数获取当前时间毫秒。

我们通过current_timestamp和第一个日期值并返回类型SECOND作为参数,如: DATEDIFF('SECOND', DATE '1970-01-01', CURRENT_TIMESTAMP()) * 1000返回的结果对于我们来说是current_time的毫秒。

答案 1 :(得分:0)

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

但是,这似乎可行:

SELECT EXTRACT (EPOCH from CURRENT_TIMESTAMP()) * 1000

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