Oracle Sql получает только месяц и год в типе даты - PullRequest
12 голосов
/ 21 июля 2011

Я хочу хранить только месяц и год в типе данных oracle.

У меня есть дата типа '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-ФЕВРАЛЬ-2010.Разве нельзя хранить только FEB-2010 в типе данных

Ответы [ 3 ]

18 голосов
/ 27 июля 2011

Самое простое решение - создать столбец с правильным типом данных: ДАТА

Например:

  1. Создать таблицу:

    создать таблицу test_date (дата mydate);

  2. Вставить строку:

    вставить в значения 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

6 голосов
/ 21 июля 2011

«ФЕВ-2010» не является датой, поэтому не имеет смысла хранить его в столбце даты.

Вы всегда можете извлечь нужную часть строки, в вашем случае "MON-YYYY "с использованием логики TO_CHAR, которую вы показали выше.

Если это для таблицы DIMENSION в среде хранилища данных, и вы хотите включить их как отдельные столбцы в таблицу измерений (в качестве атрибутов данных), вам нужно будет хранить месяц и год в двух разных столбцах., с соответствующими типами данных ...

Пример ..

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
0 голосов
/ 26 августа 2015
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...