2013-03-26 4 views
0

У меня есть запрос, который принимает дату в следующем формате:Extract месяц от даты, количества

'31 AUG 2012'

Мне нужно запрос, чтобы вернуть месяц как число. Для указанной даты, то возвращаемое значение будет 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: неверный номер

Как это можно сделать? Благодаря

ответ

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

Дата '' Оператор принимает только формат ISO ...

date '2012-08-31' 
0

На самом деле то, что вы сделали ошибка вы дается только 'MM' как format_mask вместо этого давать «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 (с учетом текущей даты)

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

Применение 'to_date()' на 'sysdate' есть ** полностью ** бесполезно, как' sysdate' уже дата. Хуже того, это выражение подвержено неявным настройкам NLS, основанным на преобразовании типов данных, и будет вызывать ошибку при любой среде, где формат даты по умолчанию NLS - это * не * 'dd-mon-yyyy'. Возможно, вы имели в виду, например, 'to_char()'? –

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; 
3
SELECT EXTRACT(MONTH FROM date '2012-08-31') FROM dual; 
Смежные вопросы