我想查找现在和给定时间之间的差小于 1周的数据。
我是Oracle新手,所以如何获得systime和oracle date之间的差异,例如2020-08-21T10:06:24.662+04:00
?如果有关系的话,我也位于 +4 时区;
谢谢。
答案 0 :(得分:2)
您可以从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;
输出:
DIFFERENCE | DIFFERENCE :---------------------------- | :------------- +000000034 02:49:11.267635000 | 1 week or more
差异是34天2小时49分钟11(有点)秒;超过1周。
db <>提琴here
实际上我想在where语句中使用,但是我不能使用它的结果,例如34 4:55:8.970134 <7。希望您能得到我))))我应该减去吗?
如果您有一些测试数据:
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 );
然后,您可以从ACTIVE_DATE
中减去SYSTIMESTAMP
并将其与INTERVAL
子句中的WHERE
进行比较:
SELECT *
FROM table_name
WHERE SYSTIMESTAMP - active_date < INTERVAL '7' DAY;
哪个输出:
ID | ACTIVE_DATE -: | :------------------------------- 2 | 2020-09-18T10:25:39.528048+01:00
db <>提琴here
答案 1 :(得分:0)
我将进行比较:
where active_date > systimestamp - interval '7' day
这假定所有日期都是过去的日期。另外,这可以使用active_date
上的索引。