Oracle Sql получает только месяц и год в дате данных
Я хочу сохранить только месяц и год в виде данных оракула.
У меня есть дата, подобная '01 -FEB-2010 ', хранящаяся в столбце time_period.
Чтобы получить только месяц и год, я написал запрос типа
select to_char(time_period,'MON-YYYY') from fact_table;
Я получаю результат как "FEB-2010", который хорош, но единственная проблема заключается в том, что он находится в типе данных varchar.
Итак, мне понравилось
select to_date(to_char(time_period,'MON-YYYY'),'MON-YYYY') from fact_table
и я получаю 01-FEB-2010. Невозможно ли сохранить только FEB-2010 в типе даты даты
Ответы
Ответ 1
"FEB-2010" не является датой, поэтому было бы бессмысленно хранить его в столбце даты.
Вы всегда можете извлечь нужную строку, в вашем случае "MON-YYYY", используя логику TO_CHAR, показанную выше.
Если это для таблицы DIMENSION в среде хранилища данных, и вы хотите включить их как отдельные столбцы в таблицу измерений (в качестве атрибутов данных), вам нужно будет хранить месяц и год в двух разных столбцах, с соответствующими Datatypes...
Пример..
Month varchar2(3) --Month code in Alpha..
Year NUMBER -- Year in number
or
Month number(2) --Month Number in Year.
Year NUMBER -- Year in number
Ответ 2
Самое простое решение - создать столбец, используя правильный тип данных: DATE
Например:
-
Создать таблицу:
создать таблицу test_date (дата mydate);
-
Вставить строку:
вставить в значения test_date (to_date ('01 -01-2011 ',' dd-mm-yyyy '));
Чтобы получить месяц и год, сделайте следующее:
select to_char(mydate, 'MM-YYYY') from test_date;
Ваш результат будет следующим: 01-2011
Еще одна классная функция для использования - "EXTRACT"
select extract(year from mydate) from test_date;
Это вернет: 2011
Ответ 3
SELECT to_char(to_date(month,'yyyy-mm'),'Mon yyyy'), nos
FROM (SELECT to_char(credit_date,'yyyy-mm') MONTH,count(*) nos
FROM HCN
WHERE TRUNC(CREDIT_dATE) BEtween '01-jul-2014' AND '30-JUN-2015'
AND CATEGORYCODECFR=22
--AND CREDIT_NOTE_NO IS NOT NULL
AND CANCELDATE IS NULL
GROUP BY to_char(credit_date,'yyyy-mm')
ORDER BY to_char(credit_date,'yyyy-mm') ) mm
Вывод:
Jul 2014 49
Aug 2014 35
Sep 2014 57
Oct 2014 50
Nov 2014 45
Dec 2014 88
Jan 2015 131
Feb 2015 112
Mar 2015 76
Apr 2015 45
May 2015 49
Jun 2015 40