从日期中提取月份作为数字

时间:2013-03-26 09:27:51

标签: sql oracle

我的查询接受以下格式的日期:

'2012年4月31日'

我需要查询将月份作为数字返回。对于上述日期,返回的值将为08

我尝试了以下内容:

EXTRACT(MONTH FROM DATE '31 AUG 2012')
TO_DATE('31 AUG 2012', 'MM')
TO_CHAR('31 AUG 2012', 'MM')

所有这些都分别给我以下错误:

ORA-01861:文字与格式字符串不匹配 ORA-01843:不是有效月份 ORA-01722:无效数字

如何实现这一目标?感谢

5 个答案:

答案 0 :(得分:3)

SELECT EXTRACT(MONTH FROM date '2012-08-31') FROM dual;

答案 1 :(得分:2)

EXTRACT(MONTH FROM to_date('31 AUG 2012','DD MON YYYY'))

日期''运算符只接受ISO格式...

date '2012-08-31'

答案 2 :(得分:0)

实际上你犯的错误是你只给'MM'作为格式_掩码而不是你给'DD / MM / YYYY',希望它也能正常工作

SELECT TO_CHAR(SYSDATE,'DD/MM/YYYY HH24:MI:SS') FROM AB;

输出: 26/03/2013 15:15:34

如果您只需要显示月份,请尝试使用:

SELECT EXTRACT(MONTH FROM SYSDATE) FROM AB;

以上将MAR显示为3(考虑今天的日期)

答案 3 :(得分:0)

您必须将08转换为8,因为08是字符字段,因此我使用to_number()而不是to_char,以便它返回确切的数字。

select to_number(to_char(to_date('31-AUG-2012','DD-MON-YYYY'),'MM')) from your_tbl;

答案 4 :(得分:-1)

select substr(to_date(sysdate,'dd-mon-yyyy'),4,3) from dual;