首页 > 解决方案 > 如何使用 TIMEZONE 列获取时间戳(4)的前一小时?

问题描述

所以我有一个名为 Value 的表。我正在尝试导出最后一小时的值(HR --> Timestamp(4) with TIME ZONE),以便我可以在我正在构建的这个存储过程中的条件语句中使用它。但是,当我尝试以下操作时,Oracle 仅返回日期(01-Jan-19)而不是前一小时(01-Jan-19 01.00.00.00000000 AM UTC)。我究竟做错了什么?

select hr
     , hr - (1/24) as Converted
 from value;

如果我尝试以下操作,我会返回 ' 31-DEC-16 12.00.00.000000000 AM ' 作为 'Converted' 的值(无论 HR 的值是什么):

select hr
     , to_timestamp(hr - (1/24)) as converted
   from value;

最终将用作我的存储过程中变量的定义:

 select max(value) 
   into v_Previous_hour
   from value
  where hr = hr - (1/24);

我在这里错过了什么吗?提前致谢。

标签: sqloracle

解决方案


或者你可以使用INTERVAL

SELECT TO_CHAR(HR) AS HR,
       TO_CHAR(CAST(HR - INTERVAL '1' HOUR - INTERVAL '0.233' SECOND AS TIMESTAMP(4) WITH TIME ZONE)) AS HR_MINUS_ONE_HOUR
  FROM VAL;

(这里我减去了额外的 0.233 秒,以确保我们正在处理时间戳,根据@AlexPoole 对@OldProgrammer 的回答的评论)。

SQLFiddle在这里


推荐阅读