OracleのSYSDATEを使用してシステム日付を取得する方法です。データの更新時間等で使用する場合が多いSYSDATEですが、そのまま使用するよりも、ちょっとカスタマイズして使用する場合が多いです。
SYSDATEとは
SYSDATEとは、OracleのSQL言語リファレンスには「データベース・サーバーが存在するオペレーティング・システムの現在の日付と時刻のセットを戻します。」と記載があります。
簡単に言えば、データベース内部に持っている日付と時刻を取得するということです。試しに、Oracle Application Express(Oracle APEX)でSYSDATEを実行してみます。
こんな感じに出てきます。FROM句にDUALテーブルにしなくてもSYSDATEは取得可能です。戻り値はDATE型です。
TO_CHARを使用して日付フォーマットを指定する
さて、SYSDATEですが、フォーマット指定で日付形式を変えることが出来ます。よくある「yyyymmdd」や「yyyy/mm/dd」という形式にすることで、システムで扱いやすくすると言った方法です。TO_CHARを使用すれば欲しいフォーマットで取得できます。
yyyymmdd形式・yyyy/mm/dd形式
もっとも使用される日付形式の一つです。
SELECT TO_CHAR(SYSDATE,'yyyymmdd') FROM DUAL;
「yyyymmdd」は小文字でも大文字でもOKです。上記を実行します。
yyyymmdd形式で出ましたね。また、スラッシュ付き(yyyy/mm/dd)で日付を取得したい場合は以下の様にします。
SELECT TO_CHAR(SYSDATE,'yyyy/mm/dd') FROM DUAL;
では、これも実行します。
yyyy/mm/dd形式で取得できましたね。
yyyymmdd HH24:MI:SS形式
システムの日付だけでなく、時間まで取得したい場合です。これも日付の時と同様にTO_CHARの第二引数に取得したい形式を指定します。
SELECT TO_CHAR(SYSDATE,'yyyymmdd HH24:MI:SS') FROM DUAL;
これを実行してみます。
時刻まで取得できましたね。
年だけ、月だけ、日付だけ、時間だけ…みたいな場合
上記で紹介した例は「yyyymmdd」と言った年月日や、「HH24:MI:SS」と言った時分秒をまとめて取得しましたが、「西暦だけ取得」とか「時間だけ取得したい」場合もTO_CHARを用いることで取得可能です。例えば、西暦だけ欲しいという場合は、次の様に記述します。
SELECT TO_CHAR(SYSDATE,'yyyy') FROM DUAL;
先ほどと同じで第二引数にyyyyと記述するだけです。
また、yyとすれば、西暦の下二桁を取得できます。
こんな感じでSYSDATEとTO_CHARを使えば、システム日付をカスタマイズして取得することが可能です。フォーマットの詳細はOracle社の書式モデルのページを確認して下さい。
関連記事
.