【发布时间】:2020-09-24 08:45:07
【问题描述】:
我想查找现在和给定时间之间的差异小于 1周的数据。
我是 Oracle 的新手,那么如何获得 systime 和 oracle 日期之间的差异,例如2020-08-21T10:06:24.662+04:00?如果重要的话,我也在 +4 时区;
谢谢。
【问题讨论】:
我想查找现在和给定时间之间的差异小于 1周的数据。
我是 Oracle 的新手,那么如何获得 systime 和 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;
输出:
区别 |区别 :---------------------------- | :------------- +000000034 02:49:11.267635000 | 1周以上
相差 34 天 2 小时 49 分钟 11 秒(还有一点);超过 1 周。
db小提琴here
实际上我想在 where 语句中使用,但我不能像 34 4: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;
哪些输出:
身份证 | ACTIVE_DATE -: | :-------------------------------- 2 | 2020-09-18T10:25:39.528048+01:00
db小提琴here
【讨论】:
我会这样比较:
where active_date > systimestamp - interval '7' day
这假定所有日期都在过去。另外,这可以使用active_date上的索引。
【讨论】: