我想找到现在和给定时间之间的差异小于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
上的索引。