系统时间与 YYYY-MM-DD "T" HH24:MI:SS.FFTZH:TZM 之间的区别



我想找到现在和给定时间之间的差异小于1周的数据。我是Oracle的新手,所以如何获得系统时间和Oracle日期之间的差异,例如2020-08-21T10:06:24.662+04:00?如果重要的话,我也在+4时区;

谢谢。

您可以从SYSTIMESTAMP中减去时间戳,它会给您一个INTERVAL DAY TO SECOND结果作为差值:

SELECT SYSTIMESTAMP - TIMESTAMP '2020-08-21 10:06:24.662+04:00' AS difference,
CASE
WHEN SYSTIMESTAMP - TIMESTAMP '2020-08-21 10:06:24.662+04:00'
>= INTERVAL '7' DAY
THEN '1 week or more'
ELSE 'Less than 1 week'
END AS difference
FROM   DUAL;

输出:

差异|差异:------------------------------|:-------------+0000000 34 02:49:11.267635000 | 1周或1周以上

差异为34天2小时49分11秒(还有一点(;超过1周。

db<gt;小提琴这里


更新

实际上我想在where语句中使用,但我不能像344:55:8.970134<希望你能帮我做减法吗?

如果您有一些测试数据:

CREATE TABLE table_name (
id          NUMBER(10,0)
GENERATED ALWAYS AS IDENTITY
CONSTRAINT table_name__id__pk PRIMARY KEY,
active_date TIMESTAMP WITH TIME ZONE
);
INSERT INTO table_name ( active_date )
VALUES ( TIMESTAMP '2020-08-21 10:06:24.662+04:00' );
-- Insert a value exactly 6 days ago.
INSERT INTO table_name ( active_date )
VALUES ( SYSTIMESTAMP - INTERVAL '6' DAY );

然后,您可以从SYSTIMESTAMP中减去ACTIVE_DATE,并将其与WHERE子句中的INTERVAL进行比较:

SELECT *
FROM   table_name
WHERE  SYSTIMESTAMP - active_date < INTERVAL '7' DAY;

哪个输出:

ID|ACTIVE_DATE-:|:-------------------------------2|2020-09-18T10:25:39.528048+01:00

db<gt;小提琴这里

我会按照以下方式进行比较:

where active_date > systimestamp - interval '7' day

这是假设所有日期都在过去。此外,这可以使用active_date上的索引。

最新更新