[ Oracle ] Date 型や Timestamp 型から年月日や曜日情報を取得 ( EXTRACT )

Pocket

Date 型や Timestamp 型から 年や月の情報を EXTRACT 関数で取得することができます。ここでは使用例を掲載しています。

スポンサーリンク


EXTRACT 関数の使用例

table1 テーブルの update_date カラム ( Date 型 ) からそれぞれ年月日の情報のみ抽出してみます。

// 年を取得する
select extract(year from update_date) from table1 where cd ='嵐';

// EXTRACT(YEARFROMUPDATE_DATE)
// ----------------------------
//                         2015

// 月を取得する
select extract(month from update_date) from table1 where cd ='松潤';

// EXTRACT(MONTHFROMUPDATE_DATE)
// -----------------------------
//                            10

// 日を取得する
select extract(day from update_date) from table1 where cd ='剛田武';

// EXTRACT(DAYFROMUPDATE_DATE)
// ---------------------------
//                          21

2015年10月21日は「バック・トゥ・ザ・フューチャー Part2」で描かれた未来です

時間情報は Timestamp 型にキャストして取得する

Date 型には時間の情報も格納されていますが、Date 型のフィールドから EXTRACT 関数 を使って時間情報を取得しようとすると「ORA-30076: 抽出ソースの抽出フィールドが無効です」とエラーになってしまいます。

// 時間データを取得
select extract(hour from update_date) from table1 where cd ='桜井';

行1でエラーが発生しました。:
ORA-30076: 抽出ソースの抽出フィールドが無効です

上記エラーを回避するには Date 型を Timestamp 型にキャストする必要があります。EXTRACT 関数はなかなかに融通がきかない頑固な性格です。

// 時を取得する
select extract(hour from cast(update_date as timestamp)) from table1 where cd ='スマップ';

// EXTRACT(HOURFROMCAST(UPDATE_DATEASTIMESTAMP))
// -----------------------------------------------
//                                            10

// 分を取得する
select extract(minute from cast(update_date as timestamp)) from table1 where cd ='キム兄';

// EXTRACT(MINUTEFROMCAST(UPDATE_DATEASTIMESTAMP))
// -----------------------------------------------
//                                              20

// 秒を取得する
select extract(second from cast(update_date as timestamp)) from table1 where cd ='キムタク';

// EXTRACT(SECONDFROMCAST(UPDATE_DATEASTIMESTAMP))
// -----------------------------------------------
//                                              30
曜日情報の取得

to_char 関数を使って Date 型のフィールドから曜日情報を日本語表記で取得するサンプルになります。

SQL> -- 曜日を省略表記で取得する
SQL> select to_char(SYSDATE,  'DY') from dual;

TO_C
----
火

SQL> -- 曜日を取得する
SQL> select to_char(SYSDATE,  'DAY') from dual;

TO_CHAR(S
---------
火曜日

環境によっては曜日情報を日本語表記で取得できないこともあるようです。そのような時は to_char 関数の第3パラメータに NLS_DATE_LANGUAGE = japanese を指定すると強制的に日本語で取得することができます。

SQL> select to_char(SYSDATE,  'DY', 'NLS_DATE_LANGUAGE = japanese') from dual;

TO_C
----
火

 

スポンサーリンク

Pocket

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>