h2 中的 CURRENT_TIMESTAMP 以毫秒为单位
Posted
技术标签:
【中文标题】h2 中的 CURRENT_TIMESTAMP 以毫秒为单位【英文标题】:CURRENT_TIMESTAMP in milliseconds in h2 【发布时间】:2015-06-08 23:34:05 【问题描述】:问题CURRENT_TIMESTAMP in milliseconds 讨论了如何“从mysql
或PostgreSql
中的时间戳中获取毫秒数”。但是答案中的方法不起作用,因为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】:我知道这是一个老问题,但任何像我这样的人都可以搜索这个问题的答案。我们可以通过h2
DATEDIFF()
函数获取当前时间,以毫秒为单位。
首先,我们将 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 获取秒数