Oracleが次のように異なるタイムゾーンの日付を比較できるかどうかを知りたいのですが。
2016年12月26日3:58:16.491476 AM -06:00> 2016年12月26日3:58:16.491476 AM +05:00
ところで、私はこの比較を行うためにJPAを使用しています。アイデアは、1時間前に作成されたすべての行を探すことです。
Afterキーワードを使用して検索できる可能性があることがわかりました(つまり、findMeasureDateAfter)
Oracleでのチェックは非常に簡単です。答えはイエスです。次の図では、出力にセッションのNLS設定を使用したタイムスタンプが表示されていることに注意してください(変更する必要はありませんでした)。
with
inputs ( ts1, ts2 ) as (
select to_timestamp_tz('12/26/2016 3:58:16.491476 AM -06:00',
'mm/dd/yyyy hh:mi:ss.ff AM TZH:TZM'),
to_timestamp_tz('12/26/2016 3:58:16.491476 AM +05:00',
'mm/dd/yyyy hh:mi:ss.ff AM TZH:TZM') from dual
)
select ts1, ts2, case when ts1 > ts2 then 'ts1 > ts2'
when ts1 = ts2 then 'ts1 = ts2'
when ts1 < ts2 then 'ts1 < ts2'
end as comparison,
ts1 - ts2 as difference
from inputs
;
TS1 TS2 COMPARISON DIFFERENCE
----------------------------- ----------------------------- ---------- -------------------
26-DEC-16 03.58.16.491 AM -06 26-DEC-16 03.58.16.491 AM +05 ts1 > ts2 +00 11:00:00.000000
このような述語に基づいてOracleテーブルからデータをプルする場合は、データベースでその作業を行う方がはるかに優れているため、Javaでこれをどのように行うかは関係ありません。(Javaでタイムスタンプを確認した後、ほとんどの行を無視するだけで、すべての行をフェッチする必要はありません。)もちろん、「最後の1時間」が必要な場合は、と比較しsystimestamp - 1/24
ます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加