2017-09-07 150 views
0

從完整日期中提取月份和年份的查詢是什麼。 我的數據是這樣的:2008年1月29日 我嘗試此查詢:在oracle中從日期中提取月份和年份

select ID_NO, CHECKED_DATE, to_date(TO_CHAR(CHECKED_DATE, 'MON-YYYY'), 'MON-YYYY') AS A 
from Doctor_Checkup; 

但它會給輸出:1/1/2008

預計產量:1-2008

+0

我想你想這個'TO_CHAR(CHECKED_DATE, 'MM-YYYY')作爲了' –

回答

1

如果該字段已經是一個日期列,你可以簡單的中科院它噸至格式你想:

select ID_NO,CHECKED_DATE,ltrim(TO_CHAR(CHECKED_DATE,'mm-yyyy'),'0') AS A from Doctor_Checkup; 

如果它是一個文本列,您將需要轉換爲日期格式第一:

select ID_NO,CHECKED_DATE,ltrim(TO_CHAR(TO_DATE(CHECKED_DATE,'dd/mm/yyyy'),'mm-yyyy'),'0') AS A from Doctor_Checkup; 
1

爲了得到1-2008格式使用以下格式修剪前導零:

select ID_NO,CHECKED_DATE,ltrim(TO_CHAR(CHECKED_DATE,'MM-YYYY'),'0') AS A from Doctor_Checkup; 
4

一個日期沒有格式 - 它是stored internally to the database 7字節(代表年,月,日,小時,分鐘和秒),直到你使用的任何用戶界面(即SQL/Plus,SQL Developer,Java等)試圖將它顯示給你,用戶,並將它轉換成你會發現有意義的東西(通常是一個字符串),即日期格式。

有一點需要注意的是,日期總是有年,月,日,小時,分和秒的組件。這樣做的:

to_date(TO_CHAR(CHECKED_DATE, 'MON-YYYY'), 'MON-YYYY') 

有效一樣做:

TRUNC(Checked_Date, 'MM') 

,並還會有一個日期,小時,分鐘和秒組件,但將已被截斷到一個月的第一天的午夜。用戶界面可能只是將其偏好設置爲不顯示時間組件(但日期仍然有)。

你想要做的是將日期轉換爲一個格式化字符串:

select ID_NO, 
     CHECKED_DATE, 
     TRIM(LEADING '0' FROM TO_CHAR(CHECKED_DATE, 'MM-YYYY')) AS A 
from Doctor_Checkup; 

select ID_NO, 
     CHECKED_DATE, 
     EXTRACT(MONTH FROM CHECKED_DATE) 
     || '-' || EXTRACT(YEAR FROM CHECKED_DATE) AS A 
from Doctor_Checkup; 
+0

完全相同的解決方案爲礦山,而是兩個分鐘更快,並有關日期和格式的很好的解釋。做得好。 –

1

你想要一個字符串表示的格式月份和年份[M] M-YYYY 。但是,Oracle的TO_CHAR只支持MM-YYYY,所以如果有的話,你必須去掉前導零。

兩個解決方案:

trim(leading '0' from to_char(checked_date, 'mm-yyyy')) 

extract(month from checked_date) || '-' || extract(year from checked_date) from dual 
相關問題