我有一列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
这可能不是您想要的,但您需要告诉查询其他内容