web-dev-qa-db-ja.com

Oracle SQLは日付データ型で月と年のみを取得します

Oracleデータ型に月と年のみを格納したい。

Time_periodという列に「01-FEB-2010」のような日付が格納されています。

月と年のみを取得するために、次のようなクエリを作成しました

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

2010年2月1日を取得します。日付データ型にFEB-2010のみを保存することはできませんか

12

「FEB-2010」は日付ではないため、日付列に格納することはあまり意味がありません。

上記のTO_CHARロジックを使用して、「MON-YYYY」の場合、必要な文字列部分をいつでも抽出できます。

これがデータウェアハウス環境のDIMENSIONテーブル用であり、これらを(データ属性として)ディメンションテーブルに個別の列として含める場合、適切なデータ型を使用して、2つの異なる列に月と年を格納する必要があります。 。

例..

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
6

最も簡単な解決策は、正しいデータ型を使用して列を作成することです:DATE

例えば:

  1. テーブルを作成します。

    テーブルtest_date(mydate date)を作成します。

  2. 行を挿入:

    test_date値に挿入(to_date('01 -01-2011 '、' dd-mm-yyyy '));

月と年を取得するには、次のようにします。

select to_char(mydate, 'MM-YYYY') from test_date;

結果は次のようになります:01-2011

使用するもう1つのクールな機能は「EXTRACT」です

select extract(year from mydate) from test_date;

これが返されます:2011

18
davidsr