我在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
日期包含日期和時間元素。你還沒有提到你是否想考慮時間元素? –