代码中的数据库查询

时间:2011-01-17 23:26:05

标签: java sql oracle

我在代码中使用sysdate查询来获取过去3小时内的最后更新行(应该是可配置的)。数据库以GMT时区运行,应用程序在PST时区运行。查询看起来像这样

select * from <table> where updated_Date  < sysdate - numdtodsinterval(3,'hour')

从具有与db不同的时区的应用程序触发此类查询的建议/最佳做法是什么。

2 个答案:

答案 0 :(得分:1)

使用jdbc按原样点火。

Sysdate在服务器上解释,所以你应该没问题。无论客户端时区如何,它都会返回过去3小时的更新。 (如果您使用sysdate也保存了updated_date,那就是!)

答案 1 :(得分:1)

我不得不说,涵盖大量时区的应用程序的最佳实践是停止使用DATE数据类型并开始使用带有TIMEZONE数据类型的TIMESTAMP。

我并不是说这很容易,只是说'这可能是出于几个原因的最佳做法。

主要是它消除了任何和所有歧义。如果您使用DATE,则没有人能够根据该值计算出该值的计算结果。你懂。也许你对专栏(理想)有评论但可能会被忽视。如果它是具有TIMEZONE数据类型的TIMESTAMP,则您已经确定了与我的本地时钟无关的特定时刻。

但是这假设您可以更改数据库架构,而这可能是您无法更改的。因此,这可以作为下一个日期列的警告。