2017-09-07 120 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 
相关问题