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