2011-01-17 12 views
1

コードでsysdateクエリを使用して、過去3時間以内に最後に更新された行を取得しています(設定可能にする必要があります)。データベースはGMTタイムゾーンで実行され、アプリケーションはPSTタイムゾーンで実行されます。クエリはこのコード内のデータベースクエリ

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

のように見えるデシベルと異なるタイムゾーンを持つアプリケーションからこのようなクエリを発射する推奨/ベストプラクティスは何ですか。

+2

これは、最初にupdated_Dateをどのように生成したかによって異なります。 – Affe

+2

アフィが言ったこと。さらにupdated_dateのデータ型を追加します。列の名前に_dateが含まれていても、DATEはそのデータ型であるとは限りません。 --- sayler ' –

答えて

1

私はタイムゾーンの多くをカバーしていたアプリケーションのためののベストプラクティスは、DATEデータ型の使用を停止し、TIMESTAMPを使用して開始することであることを言わなければならないでしょうTIMEZONEデータ型。

私はそれが簡単だと言っているわけではありませんが、それはたぶんいくつかの理由でベストプラクティスです。

主な点は、すべてのあいまいさを排除することです。 DATEを使用すると、その値がどの値に基づいて計算されたか誰にも知らせられません。ええと。多分あなたは列(理想)についてのコメントを持っていますが、見落とされているかもしれません。それがTIMEZONEデータ型を持つTIMESTAMPの場合、ローカルクロックとは関係なく特定の瞬間を釘付けにしています。

しかし、これはデータベーススキーマを変更できると想定していますが、これはおそらくできません。これはあなたの次の日付の列の警告として役立ちます。

+0

も、oracleのバージョンによって異なります。 –

1

jdbcを使用しているかのように起動します。

Sysdateはサーバー上で解釈されるため、問題はありません。クライアントのタイムゾーンに関係なく、過去3時間の更新が返されます。 (あなたはそれがあるだけでなくSYSDATEを使用してupdated_dateを保存した場合!)

関連する問題