在Oracle中如何计算当前日期和列日期之间的差异



我有一列INACTIVE_TIME,我需要在其中输入整数(从某个日期算起经过了多少天(,以表示当前日期和列日期之间的差异("LOAD_date"列(。

LOAD_DATE列中,我有格式为03-AUG-22 03.55.57.587481000 PM的数据。

我知道我需要从LOAD_date列中获取当前日期和减去日期之后的日期。我试着这样做:

SELECT COUNT(*)
FROM TABLE_NAME
WHERE ((TO_DATE(SYSDATE,'DD/MM/YYYY')-(TO_DATE(LOAD_DATE,'DD/MM/YYYY'));

这是关于load_date列的数据类型,而不是您查看该值的方式(因为它可以更改(。我推测(并希望(是timestamp;你没有把它作为字符串存储,是吗?

如果是这样,则不将to_date应用于sysdate——它是一个已经返回date数据类型的函数。

设置时间戳和日期格式(只需了解什么是;您的工具显示不同的格式,包括月份名称和两位数的年份((您不必这样做(。

SQL> alter session set nls_timestamp_format = 'dd.mm.yyyy hh24:mi:ss.ff9';
Session altered.
SQL> alter session set nls_date_format = 'dd.mm.yyyy hh24:mi:ss';
Session altered.

样品表;注释数据类型:

SQL> create table table_name (load_date timestamp);
Table created.
SQL> insert into table_name values (systimestamp);
1 row created.

您正在寻找的查询(至少,我认为是这样(:

SQL> select load_date, sysdate,
2    --
3    sysdate - load_date as diff
4  from table_name;
LOAD_DATE                      SYSDATE             DIFF
------------------------------ ------------------- ------------------------------
04.08.2022 10:22:58.101062000  04.08.2022 10:23:08 +000000000 00:00:09.898938
SQL>

提取天、小时、分钟。。。不管怎样,您都可以使用函数extract。例如:

SQL> select load_date,
2    sysdate,
3    sysdate - load_date as diff,
4    --
5    extract (day    from sysdate - load_date) as diff_days,
6    extract (hour   from sysdate - load_date) as diff_hours,
7    extract (minute from sysdate - load_date) as diff_minutes
8  from table_name;
LOAD_DATE                 SYSDATE             DIFF                        DIFF_DAYS DIFF_HOURS DIFF_MINUTES
------------------------- ------------------- -------------------------- ---------- ---------- ------------
04.08.22 10:22:58,101062  04.08.2022 11:51:32 +000000000 01:28:33.898938          0          1           28
SQL>

Where子句没有说明任何内容。你想让它过滤什么?

尝试Where (sysdate - table_name.load_date) > 0

这可能不是您想要的,但您需要告诉查询其他内容

最新更新