【问题标题】:How to do "select current_timestamp" in hsqldb?如何在 hsqldb 中执行“选择 current_timestamp”?
【发布时间】:2010-10-28 22:11:28
【问题描述】:

甲骨文:

select systimestamp from dual

MySQL:

select current_timestamp

SQL 服务器:

select current_timestamp

PostgreSQL:

select current_timestamp

问题是,如何获取HSQLDB 中的当前时间戳?我使用版本 1.8.0.10

【问题讨论】:

    标签: sql database hsqldb embedded-database


    【解决方案1】:

    在我使用的选择中

     SELECT CURRENT_DATE AS today, CURRENT_TIME AS now FROM (VALUES(0))
    

    【讨论】:

    • 我更喜欢这个解决方案,因为它不需要我有任何表格(用于简单的连接测试)。
    • 我发现这个答案更有用。我的目标是只做一个简单的选择语句来验证语法。大多数 SQL 实现允许在没有 FROM 子句的情况下这样做。这是一项很棒的工作。
    【解决方案2】:

    @alexdown's answer 非常正确——在 1.8 下,您需要一个单行关系来执行此操作,例如 Oracle 的 DUAL 或 InterBase/Firebird RDB$DATABASE 表。

    但是,当您迁移到 2.0 系列时,您将能够使用 SQL-99“VALUES 构造函数”而不依赖于单行关系:

    sql> VALUES (current_timestamp);
    2010-04-22 15:22:40.997
    

    如果您需要从 VALUES 选择的特定于供应商的默认值中重命名列,您始终可以使用选择:SELECT * FROM (VALUES (current_timestamp)) v(my_new_name)

    【讨论】:

      【解决方案3】:

      你可以使用

      CALL current_timestamp
      

      检索当前时间戳。根据对 HSQL 邮件列表的讨论,这比从 INFORMATION_SCHEMA.SYSTEM_TABLES 进行虚拟选择要有效得多。

      【讨论】:

        【解决方案4】:

        你可以写

        select current_timestamp from tablename  
        

        其中tablename 是您数据库中的真实表。

        查询的结果只是当前时间戳。

        【讨论】:

        • 谢谢,但是使用休眠我会执行 session.createSQLQuery("select current_timestamp from users") 并且我得到 .list() 的空列表和 .uniqueResult() 的空列表。该表存在。如果我放置一个不存在的表,我会正确得到 java.sql.SQLException: Table not found in statement [select current_timestamp from qwerty]
        • 您使用的表是空的吗?出于某种原因,我做了几个测试,似乎如果选择的结果是一个空列表,你没有时间戳,如果选择的结果是一个行列表,你得到的时间戳与行数..
        • 我知道这是一个老问题,但是如果你想编写不依赖于特定数据库的通用代码(例如在可重用库中),你可以尝试使用类似的东西:@ 987654323@
        • 如果表可能为空,您需要使用最大聚合和合并来包装时间戳:select coalesce(max(current_timestamp()), current_timestamp()) from tablename
        【解决方案5】:

        使用 HSQLDB 2.1 及更高版本,您拥有所有选项。

        通过连接属性 hsqldb.syntax_ora、hsqldb.syntax_pgs、hsqldb.syntax_mss 或 hsqldb.syntax_mys=true,您可以使用其他数据库支持的形式。等效的 SQL 是 SET DATABASE SQL SYNTAX ORA TRUE,其他方言也类似。

        HSQLDB 在所有模式下都支持的原生 SQL 标准格式是这样的:

        VALUES (CURRENT_TIMESTAMP)
        

        【讨论】:

        • 实际上是SET DATABASE SQL SYNTAX ORA TRUE。你错过了“SQL”@fredt。
        猜你喜欢
        • 1970-01-01
        • 2018-09-04
        • 1970-01-01
        • 1970-01-01
        • 2019-06-18
        • 2013-03-24
        • 2010-11-14
        • 2015-06-24
        • 2016-03-25
        相关资源
        最近更新 更多