2

userCurrentDateオプションのリストと比較する必要があります。

オプションは、時間属性を含むデータベース内のテーブルです (定義: TIMESTAMP(6) WITH TIME ZONE. in oracle)。各オプションにはタイムゾーンがあります。

(userCurrentDate定義 Date. in java) は、ユーザーの時刻と日付をオフセットで保持するパラメーターです。ユーザーは世界中にいる可能性があるため、各ユーザーは異なるタイムゾーンにいます。

ユーザーの現在の日付 とオプションの日付を比較する必要があります。したがって、同じタイム ゾーンでこの 2 つのパラメーターを取得する必要があります。

SQLで同じタイムゾーンでこの2つのパラメーターを取得するにはどうすればよいですか?

私はGMTでそれらを取得しようとしたので、次のように同じベースで取得できます:

trunc(SYS_EXTRACT_UTC(o.time)) = trunc(sysdate)  

しかし、それは良い解決策ではありません。

したがって、同じタイムゾーンでそれらを取得する必要があります。SQLコマンド(または他のソリューション)でそれを取得するにはどうすればよいですか?

4

2 に答える 2

0

この問題は、タイム ゾーンのオラクル関数で解決します。使用済み:

to_timestamp_tz(to_char(CAST(FROM_TZ(CAST(sysdate AS TIMESTAMP), 'GMT') AT TIME ZONE o.time AS DATE) 

そしてそれを互いに比較します。

于 2012-05-15T14:38:18.770 に答える
0

なぜこの変換が必要だと思いますか? 使用している Oracle および Oracle JDBC のバージョンは?

userCurrentDate次のように、SQLをバインドして実行しようとしましたか?

connection.prepareStatement("select * from options o where o.time = ?")
    .setTimestamp(1, new Timestamp(userCurrentDate.getTime())
    .executeQuery();

これをojdbc14.jarOracle 10g でテストしましたが、問題なく動作します。

Dateおよびデータ型にはタイム ゾーン情報が含まれていないためTimestamp、次の場合に限り、タイム ゾーンと DB 値の一致を実際に気にする必要はありません。

  1. 実際に特定のタイムゾーンを持つDB値は必要ありません。type の列に値を挿入するとTIMESTAMP WITH TIME ZONE、JDBC ドライバーはローカル タイム ゾーンを使用します。
  2. 前に述べたように、 /型にはその情報が含まれていないため、Java プログラムで元のタイム ゾーンを表示する必要はありません。DateTimestamp

Java オブジェクトを DB 値に一致させる必要があるだけDateであれば、変換しなくても問題ありません。

また、この件名に関する包括的な記事を確認してください: [方法] Java から TimeZone を使用して Oracle TimeStamp を処理する

于 2012-04-10T13:51:57.000 に答える