甲骨文日期比较
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")
这样您就可以使用索引搜索,而无需在开始日期列上使用基于函数的索引。
我在 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")
这样您就可以使用索引搜索,而无需在开始日期列上使用基于函数的索引。