2015-07-28 39 views
1

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

现在我需要做的是,比较与SYSDATE表A中的start_date,并列出任何值thts atmost7天比SYSDATE更旧。

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

+2

在sysdate - 7和sysdate之间使用'Where to_date(start_date,'YYYY-MM-DD:HH24:MI:SS');' – San

+0

日期包含日期和时间元素。你还没有提到你是否想考虑时间元素? –

回答

2

您可以执行以下检查日期:

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

这是不正确的,因为你没有考虑时间部分。日期包含日期和时间元素。 –

+0

但我只考虑日期部分,即使它包含时间元素。 –

+1

为什么? OP没有提到这一点。你也没有提到任何事情。如果你看看POSTED * Start_date。('2011-09-17:09:46:13')*他有日期和时间元素。您的查询将过滤掉那些日子之外的行。 –

1

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

'start_date'是varchar2数据类型,您必须使用** TO_DATE **将其明确地转换为日期,然后将其与SYSDATE进行比较。 –

+0

是啊,发现几分钟前,当人们在varchar列中存储日期时,仍然很烦我 – davegreen100

1

我在表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); 
1

虽然你应该是存储您倍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") 

这将让你使用一个索引的搜索,而无需在开始日期列一个基于函数的索引。

+0

你真的建议比较字符串而不是日期吗?对于分析代码的人来说,这会非常令人讨厌和困惑。有人会如何解释下面的字符串“2015-07-01”?是7月1日还是1月7日? –

+0

这是一个实用的方法。通常你永远不会考虑它,因为大于或小于不适用于“1989年7月1日”等。该日期肯定是7月1日,因为这是ISO-8601日期格式 –