簡體   English   中英

了解Oracle的to_date / to_char

[英]Understanding Oracle's to_date / to_char

因此,我正在為自己做一些練習,並按照以下說明為自己提供了一種狀態:(我在醫院使用他們的測試數據庫)顯示:

  1. Lname, Fname, Mname, Birth_date, Chief_Complaint, DTTM_ADM (日期/時間允許)
  2. 那么我的搜索將僅在20082010 DTTM_ADM之間
  3. 主要投訴將由用戶手動輸入。

我知道如何顯示我給自己的第一條和第二條指令,但是我很難執行第二條指令。 我對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種方法來做到這一點,

  1. 您可以使用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用於將日期轉換為特定的字符串格式,例如,僅日期,僅月份,僅年份,僅小時或帶有日期秒的年月年等。請參考文檔鏈接中的答案。

  2. 您可以使用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')

一些注意事項:-

  • 我假設DTTM_ADM的類型為DATE
  • 另一種方法是在DTTM_ADM上使用TO_CHAR ,但這將使Oracle無法使用該列上的索引
  • 第一個條件是大於或等於,以防某人在2008年1月1日午夜正確入場。
  • 第二個條件小於,因此,如果某人於2011年1月1日午夜被錄取,則不將其包括在結果中

我將在您的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM