【问题标题】:difference between systime and YYYY-MM-DD"T"HH24:MI:SS.FFTZH:TZMsystime 和 YYYY-MM-DD"T"HH24:MI:SS.FFTZH:TZM 之间的区别
【发布时间】:2020-09-24 08:45:07
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: sql oracle oracle11g


    【解决方案1】:

    您可以从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

    【讨论】:

    • 当我这样使用时: select (systimestamp - (to_timestamp_tz(ACTIVE_DATE,'YYYY-MM-DD"T"HH24:MI:SS.FFTZH:TZM'))) 结果之间的差异数日期和时间,有点像 34 4:55:8.970134。实际上我想在 where 语句中使用,但我不能像 34 4:55:8.970134
    【解决方案2】:

    我会这样比较:

    where active_date > systimestamp - interval '7' day
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-11
      • 1970-01-01
      • 2010-10-04
      • 2021-11-27
      • 2013-06-10
      • 2020-12-14
      相关资源
      最近更新 更多