Oracle Sql получает только месяц и год в типе даты

Я хочу хранить только месяц и год в типе данных 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 в типе данных

12 голосов | спросил Anand Sunderraman 21 J000000Thursday11 2011, 22:53:40

3 ответа


0

«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
ответил Rajesh Chamarthi 21 J000000Thursday11 2011, 23:37:01
0

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

Например:

  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

ответил davidsr 27 J000000Wednesday11 2011, 15:51:33
0
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
ответил Asim 26 PM00000010000001631 2015, 13:39:16

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132