甲骨文日期比较

Oracle Date Comparsion

我在 TableA 中有一列,其中包含列 Start_date.('2011-09-17:09:46:13') 的日期作为 Varchar2 数据类型。

现在我需要做的是,将 TableA 的 Start_date 与 SYSDATE 进行比较,并列出最多比 SYSDATE 早 7 天的任何值。

任何人都可以帮助我解决这个问题。

类似

select * from tableA
where start_date between sysdate-7 and sysdate

您可以执行以下操作来查看日期:

select * from 
TableA
where
to_date(start_date,'YYYY-MM-DD') between sysdate and sysdate-7;

I have a column in TableA which contains date as Varchar2 datatype for column Start_date.( '2011-09-17:09:46:13').

那么你的设计有缺陷。您必须为数据使用适当的数据类型。日期时间应始终存储为 DATE 数据类型。

Now what i need to do is , compare the Start_date of TableA with the SYSDATE, and list out any values thts atmost 7days older than SYSDATE.

由于你的列的数据类型是VARCHAR2,你必须使用TO_DATE显式地将字符串转换成日期.

where to_date(start_date,'YYYY-MM-DD HH24:MI:SS') between sysdate and sysdate-7;

请记住,DATE 具有 日期和时间元素 。如果你想忽略时间部分,那么你需要使用 TRUNC.

例如,

SQL> alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS';

Session altered.

SQL> SELECT sysdate FROM DUAL;

SYSDATE
-------------------
2015-07-28 16:03:32

SQL> SELECT TRUNC(sysdate) FROM DUAL;

TRUNC(SYSDATE)
-------------------
2015-07-28 00:00:00

SQL>

因此,BETWEEN sysdate AND sysdate -7 将考虑当前日期时间直到过去 7 天直到该时间部分。如果只想考虑日期部分,请使用 TRUNC.

例如,

where to_date(start_date,'YYYY-MM-DD') between TRUNC(sysdate) and TRUNC(sysdate-7);

尽管您应该将时间存储为 DATE 数据类型,但至少以允许 greater-than/less-than 比较的格式存储日期。

因此,虽然您应该将这些列转换为日期,或者将值转换为日期以便与 SYSDATE -7 进行比较,但您也可以将 SYSDATE -7 转换为与您存储的相同的字符串格式。

例如:

start_date between to_char(sysdate -7, "YYYY-MM-DD HH24:MI:SS") and
                   to_char(sysdate   , "YYYY-MM-DD HH24:MI:SS")

这样您就可以使用索引搜索,而无需在开始日期列上使用基于函数的索引。