【问题标题】:How do you get entries from a Derby database that were inserted during the last 30 seconds?如何从 Derby 数据库中获取在最后 30 秒内插入的条目?
【发布时间】:2012-06-10 09:52:55
【问题描述】:

我是 Derby 的新手(基本上是一般的数据库),我正在尝试使用 Java 通过 Eclipse 来体验 Derby。

我要做的是从生成报告后的最后 30 秒内生成当前在 Derby 数据库中的所有条目的报告。

我设法在 MySQL 中得到了我想要的东西:

SELECT * FROM table WHERE datetime > (now() - 间隔 30 秒)

在 Derby 中是否有等效或类似的功能?

【问题讨论】:

    标签: java database eclipse derby


    【解决方案1】:

    很遗憾,Derby 不支持标准 (ANSI) SQL 日期算法。您需要使用 JDBC 转义函数:

    c:\db-derby-10.8.2.2\bin>ij
    ij version 10.8
    ij> connect 'jdbc:derby:c:/temp/sotest';
    ij> create table foo (datetime timestamp);
    0 rows inserted/updated/deleted
    ij> insert into foo values (current_timestamp);
    1 row inserted/updated/deleted
    ij> commit;
    ij> select *
    from foo
    where datetime > {fn timestampadd(SQL_TSI_DAY, -10, current_timestamp)};
    > > DATETIME
    -----------------------------
    2012-06-10 12:32:48.859
    
    1 row selected
    ij>
    

    有关函数的完整列表,请参阅参考手册:http://db.apache.org/derby/docs/10.8/ref/rrefjdbc88908.html

    【讨论】:

    • 我之前实际上尝试过使用此命令,但我一直收到以下错误:INTEGER is an invalid type for argument number 2 of TIMESTAMPDIFF.
    • @Stephen:它对我有用。您需要向我们展示产生该错误的代码(并请包括表格的定义)
    • 没问题,这里是:SELECT * FROM app.user_count WHERE datetime > {fn timestampdiff(SQL_TSI_SECOND, -30, CURRENT_TIMESTAMP)};
    • @Stephen:正如我所说:那个确切的陈述对我有用(见我的编辑)。显然有些事情你没有告诉我们。
    • 感谢您的编辑,它看​​起来确实适合您。不知道为什么它对我不起作用,但这是我输入时的输出:pastebin.com/88fa3Nt3
    猜你喜欢
    • 2014-09-11
    • 2010-12-07
    • 2023-03-14
    • 1970-01-01
    • 2015-01-29
    • 2020-04-08
    • 2010-10-12
    • 2016-02-24
    相关资源
    最近更新 更多