基于日期的SQL过滤

时间:2012-03-21 22:36:26

标签: java sql

假设我正在从Java程序执行SQL查询,以从过去10天内发生的时间戳表中获取时间戳(存储为毫秒)。

我可以想到以下两种方法:

db.execSql("select * from timestamps where timestamp > (SELECT strftime('%s', 'now', '-10 days') * 1000)");

// First calculate in the number of milliseconds in Java
long t = System.currentTimeInMillis() - (10 * 86400000 /* millis in a day */);
db.execSql("select * from timestamps where timestamp > " + t);

两者都完成了工作,并且在测试时似乎是完全相同的。一种方法比另一种方法更受欢迎吗?有关系吗?有没有惯用的方法呢?

3 个答案:

答案 0 :(得分:2)

边界的准确性有多重要?服务器看到的时间可能与Java VM上的时间相差几个小时(例如时区)。我通常会使用基于服务器时间的一个,但我通常的应用程序会想要使用一天的开始而不是NOW(),以便“桶边界”不会滑动。

答案 1 :(得分:1)

我通常更喜欢使用第二种方法:如果您最终需要更改天数或计算十天窗口的日期,那么处理该天数可能会更直接,易懂和可维护在Java。

答案 2 :(得分:0)

虽然我没有确凿的测试来证明这一点,这只是猜想,我想我想在软件中计算它(通过Java)并将“瓶颈”放在那里。虽然性能可能相同,但我不希望DB在不必要的情况下进行不必要的工作。

我的猜测是,您可能有许多客户端运行相同的软件,但他们可能都在查询同一个数据库。因此,我支持后一个例子。