2008/04/20

[oracle]日付に関するあれこれ

今日もgoogle gearsの使い方を書こうと思ったのですが、最近、仕事で、oracleで日付をいろいろな形で表示しなければならない機会があったので、それらの方法について書きたいと思います。

1.YYYY年MM月DD日と表示する。(年、日、月を、日本語で表示)

ORACLE 9iのSilverを参考にすると、

SELECT TO_CHAR(SYSDATE,'YYYY"年"MONTH DD"日"')
  FROM DUAL
;

via:オラクルマスター教科書Silver

と書かれていて、実際に実行してみると下のように表示されました。

2008年4月 17日

微妙に月と日の間に半角スペースが入ってしまっているので、REPLACEをかけて半角スペースを削除します。

SELECT REPLACE(TO_CHAR(SYSDATE,'YYYY"年"MONTH DD"日"'),' ')
  FROM DUAL;

実行をかけると、下のように表示されました。

2008年4月17日

これで半角スペースを除いて表示することができました。

ただ、問題点も残っていて、文字列が、20070401などの場合、2007年4月01日と返してしまい、日にちに0がついてしまうんですよね。

2007年4月1日と表示したい場合、どうすればいいのかまだわかっていません(ノ◇≦。)

2.曜日の表示。

曜日を表示するSQL文は、ORACLE小技箱によると、

select to_char(sysdate,'D') from dual;
-- 日曜を1,月曜を2とした数字

select to_char(sysdate,'DY') from dual;
-- 略式の曜日 AMERICAN_AMERICAで'WED'、JAPANESE_JAPANで'水'

select to_char(sysdate,'DAY') from dual;
-- 長い表記の曜日 'Wednesday'、'水曜日'

via:曜日を求める-ORACLE小技箱

と確かに実行すると、上のようにレスポンスが返ってきました。

3.日付にn時間を加算・減算。

日付に日にちを加算/減算する場合、日付型のまま、例えば、sysdate +/- nで表示することができるのですが、1時間加えたい、減らしたいという表現の仕方を知らなかったので、今回、調べました。

SAK Streetsの■時間の演算(時間加算、時間減算)によると、

・date 型、小数部で時間を管理している。
  jcdt date;

  jcdt := jcdt + 1 / 24; -- 1 時間加算
  jcdt := jcdt - 1 / 24; -- 1 時間減算

  select sysdate + 1 / 24 from dual;

  select to_char(
    sysdate + 1 / 24,
    'yyyy.mm.dd hh24:mi:ss'
    )
    from dual
  ;

via:■時間の演算(時間加算、時間減算)

ちなみに、分の加算/減算場合は、

・date 型、小数部で時間を管理しているので、24 * 60 = 1440 が分の単位となる。

  jcdt date;

  jcdt := jcdt + 1 / 1440; -- 1 分加算
  jcdt := jcdt - 1 / 1440; -- 1 分減算

  select sysdate + 1 / 1440 from dual;

  select to_char(
    sysdate + 1 / 1440,
    'yyyy.mm.dd hh24:mi:ss'
    )
    from dual
  ;

via:■分の演算(分加算、分減算)

というわけで、日付に1時間30分追加したい場合、下のように記述します。

SELECT sysdate + 90/1440
  FROM dual;

これだと、2008-04-17と表示されてしまい、時刻がきちんと表示されてないので、TO_CHARを使います。

SELECT to_char(sysdate + 90/1440,'yyyy/mm/dd/hh24:mi')
  FROM dual;

と書くことによって、2008/04/17/23:38という形で表示されます。

0 コメント:

コメントを投稿