[英]Understanding Oracle's to_date / to_char
因此,我正在為自己做一些練習,並按照以下說明為自己提供了一種狀態:(我在醫院使用他們的測試數據庫)顯示:
Lname, Fname, Mname, Birth_date, Chief_Complaint, DTTM_ADM
(日期/時間允許) 2008
和2010
DTTM_ADM
之間 我知道如何顯示我給自己的第一條和第二條指令,但是我很難執行第二條指令。 我對SQL及其其他功能了解不多(這就是為什么要這樣做的原因,以供學習)。
我的老師告訴我執行to_char
函數來解決我的#2指令。 由於我只是在幾年之間限制搜索(在他們的系統中,就像01-JUL-14
)。
所以我的問題是,如何以一種我只需要指示我的搜索方式來進行to_char或to_date操作,就只能以年為單位,並且沒有沿限制的日期和月份(而不是說sql 01-JUL-14
,那將是2014)
?
Table:
PATIENT_ADM A,
PATIENT_ADM B
A.DTTM_ADM > 2008
B.DTTM_ADM < 2010
如何正確執行此操作? (當您只能有限地訪問某些網站並且網速非常慢時,很難進行OJT)
您可以通過2種方法來做到這一點,
您可以使用TO_CHAR
進行年度比較,如下所示:
PATIENT_ADM A, PATIENT_ADM B TO_CHAR(A.DTTM_ADM,'YYYY') > '2008' AND TO_CHAR(B.DTTM_ADM, 'YYYY') < '2010'
說明 ,To_Char用於將日期轉換為特定的字符串格式,例如,僅日期,僅月份,僅年份,僅小時或帶有日期秒的年月年等。請參考文檔鏈接中的答案。
您可以使用EXTRACT
選項進行年度比較,如下所示
PATIENT_ADM A, PATIENT_ADM B EXTRACT(YEAR FROM A.DTTM_ADM) > 2008 AND EXTRACT(YEAR FROM B.DTTM_ADM) < 2010
說明 :提取用於從日期字段中提取特定的日期/時間部分值。 當您的數據庫中有大量數據時,這特別有用,因為與EXTRACT相比,TO_CHAR的操作成本稍高。 請參閱隨附的原始文件。
試試這樣的WHERE
子句:
WHERE A.DTTM_ADM >= TO_DATE('01-JAN-2008', 'DD-MON-YYYY') AND
A.DTTM_ADM < TO_DATE('01-JAN-2011', 'DD-MON-YYYY')
一些注意事項:-
DATE
DTTM_ADM
上使用TO_CHAR
,但這將使Oracle無法使用該列上的索引 我將在您的where子句上使用extract()
。
EXTRACT()
從時間戳類型或DATE中提取並返回年,月,日,時,分,秒或時區。
SELECT *
FROM PATIENT_ADM A, PATIENT_ADM
WHERE EXTRACT(YEAR FROM A.DTTM_ADM) > 2008
AND EXTRACT(YEAR FROM B.DTTM_ADM) < 2010;
首先確定DTTM_ADM是date類型還是varchar2或char這樣的字符類型。 它應該是一個日期,但是正如您所說的“在他們的系統中,它就像01-JUL-14”,他們可以將其存儲在字符串中。
函數to_char在日期上有效。 to_char(DTTM_ADM,'yyyy')會以字符串形式表示年份(例如'2009')。
如果DTTM_ADM恰好是字符串類型,則to_char沒有用。 您將需要字符串函數SUBSTR來獲取包含年份的子字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.