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 - 使用 Spring Web MVC 自定义处理 405 错误

html - spring thymeleaf - 从 html 表中删除对象并将 id 传递给 Controller

java - 重定向到多个选项卡

java - Java闭包-三个主要建议之间的语法差异?

java - 如何将插件项目模板集成到现有的 eclipse 项目中?

java - 找不到类的序列化程序,没有发现创建 BeanSerializer 的属性(为避免异常,请禁用 SerializationFeature.FAIL_ON_EMPTY_BEANS)

sql - 用于测试非空字符串和非空字符串的兼容 SQL

sql - 使用 SQL 垂直展开表

oracle - 匿名 block 是否存储在 SGA 中?

java - Spring Security @PreAuthorize-ProviderNotFoundException