Как конвертировать дату в номер месяца?
У меня есть столбец Месяц в моей таблице. Название месяца и дата хранятся в этом столбце месяца, как
Month
01-JAN-12
02-FEB-12
и так далее.
Как мне преобразовать ДАТУ в номер месяца, такой как
Month
1
2
и т.п.
7 ответов
select
to_char(to_date('01-JAN-12','dd-mon-yy'),'mm') from dual;
Выдержка отлично подходит для этого
EXTRACT извлекает и возвращает значение указанного поля даты и времени
with fullYear as(
select (to_date('01-jan-12') + 29*level) dte
from dual
connect by level <= 12
)
select extract(month from dte) month, dte from fullYear ;
дает тебе
MONTH DTE
1 January, 30 2012 00:00:00+0000
2 February, 28 2012 00:00:00+0000
3 March, 28 2012 00:00:00+0000
4 April, 26 2012 00:00:00+0000
5 May, 25 2012 00:00:00+0000
6 June, 23 2012 00:00:00+0000
7 July, 22 2012 00:00:00+0000
8 August, 20 2012 00:00:00+0000
9 September, 18 2012 00:00:00+0000
10 October, 17 2012 00:00:00+0000
11 November, 15 2012 00:00:00+0000
12 December, 14 2012 00:00:00+0000
Использование TO_CHAR
функционировать как в TO_CHAR(my_column, 'MM')
,
Для вашего конкретного формата вам понадобится конвертер форматов TO_CHAR(month, 'FmMM')
(спасибо Николаю Краснову за этот трюк).
Если твой month
Столбец не относится к типу даты, вам нужно сначала преобразовать его в дату: TO_CHAR(TO_DATE(month, 'DD-Mon-IY'), 'FmMM')
,
Функция datepart делает это легко
SELECT DATEPART(m, getdate())
Полностью согласен в отношении написания случая, когда Oracle предлагает встроенную функциональность:
SELECT EXTRACT(MONTH FROM DATE '2012-03-15') FROM DUAL;
SELECT EXTRACT(MONTH FROM TO_DATE('01-JAN-12', 'DD-MON-RR')) month_to_number FROM DUAL;
select to_number(to_char(to_date('01-JAN-12','dd-mon-yy'),'mm')) month_to_number from dual;
select to_number(to_char(trunc(sysdate), 'mm')) month_to_number from dual;
Вы также можете использовать функцию "DatePart":
http://docs.oracle.com/cd/E10530_01/doc/epm.931/html_esb_techref/maxl/dml/funcs/datepart.htm
SELECT ( CASE yourDate
WHEN 'Jan' THEN 1
WHEN 'Feb' THEN 2
WHEN 'Mar' THEN 3
WHEN 'Apr' THEN 4
WHEN 'May' THEN 5
WHEN 'Jun' THEN 6
WHEN 'Jul' THEN 7
WHEN 'Aug' THEN 8
WHEN 'Sep' THEN 9
WHEN 'Oct' THEN 10
WHEN 'Nov' THEN 11
WHEN 'Dec' THEN 12
END )