2015-07-28 24 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日期格式 –