我在TableA中有一列包含Start_date('2011-09-17:09:46:13')列的日期作为Varchar2数据类型。Oracle Date Comparsion
现在我需要做的是,比较与SYSDATE表A中的start_date,并列出任何值thts atmost7天比SYSDATE更旧。
任何机构都可以帮助我解决这个问题。
我在TableA中有一列包含Start_date('2011-09-17:09:46:13')列的日期作为Varchar2数据类型。Oracle Date Comparsion
现在我需要做的是,比较与SYSDATE表A中的start_date,并列出任何值thts atmost7天比SYSDATE更旧。
任何机构都可以帮助我解决这个问题。
您可以执行以下检查日期:
select * from
TableA
where
to_date(start_date,'YYYY-MM-DD') between sysdate and sysdate-7;
这是不正确的,因为你没有考虑时间部分。日期包含日期和时间元素。 –
但我只考虑日期部分,即使它包含时间元素。 –
为什么? OP没有提到这一点。你也没有提到任何事情。如果你看看POSTED * Start_date。('2011-09-17:09:46:13')*他有日期和时间元素。您的查询将过滤掉那些日子之外的行。 –
像
select * from tableA
where start_date between sysdate-7 and sysdate
'start_date'是varchar2数据类型,您必须使用** TO_DATE **将其明确地转换为日期,然后将其与SYSDATE进行比较。 –
是啊,发现几分钟前,当人们在varchar列中存储日期时,仍然很烦我 – davegreen100
我在表A列包含日期为VARCHAR2数据类型列开始_(' 2011-09-17:09:46:13' )。
然后你有一个有缺陷的设计。您必须为数据使用适当的数据类型。日期时间应始终保存为DATE数据类型。
现在我需要做的是,将TableA的Start_date与SYSDATE进行比较,并列出任何值比SYSDATE更早的7天。
因为你列的数据类型为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数据类型,你至少存储的格式允许大于/小于号比较的日期。
所以,虽然你应该将这些列转换为日期,或者值转换为日期与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")
这将让你使用一个索引的搜索,而无需在开始日期列一个基于函数的索引。
你真的建议比较字符串而不是日期吗?对于分析代码的人来说,这会非常令人讨厌和困惑。有人会如何解释下面的字符串“2015-07-01”?是7月1日还是1月7日? –
这是一个实用的方法。通常你永远不会考虑它,因为大于或小于不适用于“1989年7月1日”等。该日期肯定是7月1日,因为这是ISO-8601日期格式 –
在sysdate - 7和sysdate之间使用'Where to_date(start_date,'YYYY-MM-DD:HH24:MI:SS');' – San
日期包含日期和时间元素。你还没有提到你是否想考虑时间元素? –