systime和YYYY-MM-DD“ T” HH24:MI:SS.FFTZH:TZM之间的差异

时间:2020-09-24 08:45:07

标签: sql oracle oracle11g

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

谢谢。

2 个答案:

答案 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上的索引。

相关问题