我想知道 Oracle 是否能够比较不同时区的日期,如下所示:
2016年12月26日3:58:16.491476上午-06:00 > 2016年12月26日3:58:16.491476上午+05:00
顺便说一句,我正在使用 JPA 进行此比较,其想法是查找一小时前创建的所有行。
我发现我也许可以使用 After 关键字来查找它(即 findMeasureDateAfter)
最佳答案
在 Oracle 中检查非常容易。答案是肯定的。请注意,在下图中,输出显示了使用我 session 的 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 中的时间戳后忽略大部分行。)当然,如果您需要“最后一小时”,您可以与 systimestamp - 1/24
进行比较。 .
关于java - Oracle db 是否能够比较不同时区的时间戳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41370607/