java - Oracle db 是否能够比较不同时区的时间戳?

标签 java spring oracle date spring-data-jpa

我想知道 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/

相关文章:

java - 错误膨胀类...(CardView)

spring - @Resource 和 @Autowired 的区别

java - Spring Boot 的执行器端点在测试期间可用

oracle - 如何在 HQL 查询中使用 native sql 函数?

c# - 为什么我的更新语句没有更新表?

java - session.removeAttribute 在 java 中不起作用

Java 正则表达式 : Negative lookahead

Java 8 Lambda 重载

java - Spring @Value注入(inject)字段之间的注入(inject)字段验证

java - 给我一个 Oracle Streams 的简单示例?