OracleのSYSDATEを使用してシステム日付を取得する方法です。データの更新時間等で使用する場合が多いSYSDATEですが、そのまま使用するよりも、ちょっとカスタマイズして使用する場合が多いです。 日付型は「日」で計算します。よって、時間の場合は24で割り、分は1440で割り、秒... 現在のシステム日付を取得するSYSDATE

指定された日付の月末日を取得します。

このどちらの動作も、パフォーマンスの大きな阻害要因になります。そのため、別の方法を使用できます。それは、実際にフィルタリングの対象とする日付(複数可)に含まれない日付範囲を指定することです。リスト12の問合せにより、リスト11の問合せと同じ結果セットが取得されます。リスト11とリスト12の違いは、リスト12の問合せではHIRE_DATE列のデータに関数を適用していないことです。そうではなく、求める日付(複数可)のすぐ外側の範囲を選択して、フィルタリング対象の日付データがこの値の範囲内に含まれるようにします。, 日付計算を実行しなければならないこともよくあります。この際の便利な組込み関数(Oracle Databaseにすでに組み込まれている関数)がSYSDATEです。この関数は、データベースがインストールされたコンピュータのオペレーティング・システムに設定されている現在の日付と時刻を返します。この関数にはパラメータはありません。リスト13に、SYSDATE関数を使用し、現在の日付と時刻を返して表示する例を示します。, SYSDATEは日付計算において非常に便利です。リスト14の問合せは、本日(例では2012年8月8日)から数えた2012年の残りの日数を示します。この例で、仮にSYSDATE値を切り捨てないとすると、返されるDAYS_TILL_2013値には、SYSDATE値の断片的なデータ(時刻部分に対応するもの)が含まれます。しかし、この例ではSYSDATE値が切り捨てられるため、本日1日分を含めて2013年1月1日から減算され、この年は残り146日であるという結果が出されます。リスト15では、EMPLOYEE表のHIRE_DATE列に対してSYSDATEと日付計算(MONTHS_BETWEENという日付関数)を使用して、各従業員の勤務年数を表示します。, 日付計算には、BETWEEN演算子を使用する方法もあります。この使用例について、リスト16の問合せで示します。注意点として、BETWEEN演算子では、日付範囲の比較において、範囲の最大値の時刻部分として午前0時(00:00:00)が使用されます。日付の比較で範囲の最大値に指定した日付について、可能な値をすべて含めるには、日付範囲の最大値に時刻部分全体を含めるようにしてください。リスト16の例の場合、日付範囲の最大値に27-FEB-2010 23:59:59と指定すれば、結果セット内に、HIRE_DATE値が27-FEB-2010である2人の従業員レコードが含まれるようになります。, コード・リスト16:BETWEEN演算子では、日付範囲の比較で午前0時の時刻が使用される, この記事では、よく使用される日付関数の一部と、それらの関数を使用してデータの表示を操作する方法について説明しました。変換関数のTO_CHARとTO_DATEを使用する方法や、これらの違いについて確認しました。また、すべての日付には時刻部分が含まれ、必要に応じて時刻部分を利用することも切り捨てることもできることがわかりました。SYSDATE関数と日付計算についても紹介しました。最後に重要なこととして、WHERE句内でTO_DATEやBETWEENを使用してDATEの比較を行う際に気をつけるべき落とし穴や、予期せぬ結果を避けるための対策についても学習しました。この記事ではすべてのOracle Databaseの日付関数やデータ型変換関数を説明していません。詳しくは、数値書式要素および日時関数のドキュメントを確認してください。このSQLの基礎に関する次回の記事では、集計関数について説明します。, SQL> select first_name, last_name, TO_CHAR(hire_date, 'DD-MON-YYYY HH:MI:SS') hire_date, SQL> select SYSDATE, TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS') sysdate_with_time.

SELECT SYSDATE FR... 時間・分・秒を加算・減算する --シス... 文字列から日付型に変換するTO_DATE

日付を和暦で取得する

DBMS_OUTPUT.put_line ( --システム日付を取得する ,  c_format));

YYYY・・・西暦4桁 [ORACLE関数] 現在日時を取得する(sysdate、systimestamp) 1,443件のビュー [ORAエラー] ORA-00905: キーワードがありません。 1,399件のビュー [ORAエラー] ORA-00054: リソース・ビジー。NOWAITが指定されているか、タイムアウトしました 1,307件のビュー l_new_year - 24 例1. -- システム日付と比較する時はDBの時間がずれていないか確認してから使う select sysdate from dual;-- 直近24時間分を取得する select * from テーブル名 where 日付型のカラム > (sysdate-1);-- 今日分を取得する(=昨日の23:59:59より後) 【スポンサーリンク】 Oracle Database SQL言語リファレンス11g リリース1(11.1) <日付型> この日付書式モデルはNLS_DATE_FORMATという初期化パラメータによって設定します(初期化パラメータは、Oracle Databaseインスタンスのデフォルト設定を指定するものです。適切な権限を持つユーザーが、データベースごと、インスタンスごと、またはセッションごとに、初期化パラメータの一部を変更できます)。ある表のDATEデータ型の列に保管されたデータを初めて問い合わせると、Oracle Databaseでは、デフォルト設定に応じてDD-MON-YYYYまたはDD-MON-RRの書式マスクによってそのデータが表示されます。, RRという書式マスクは2桁の年を表すもので、2000年問題などの世紀末の問題に対処するために導入されました。RRを使用した2桁の年は、現在の年と問合せで指定した2桁の年に応じて、前世紀、今世紀、次世紀のいずれかの年を表します。表1に、現在の年と2桁の年の範囲の組合せ、その結果として想定される世紀の関係を示します。, たとえば、現在の年(2012年)の末尾2桁は12で、00~49の範囲内にあります。2012年のうちに実行したSQL問合せで、RRの年の値として15を指定した場合は、今世紀(21世紀)の末尾15の年(2015年)と見なされます(15が0~49の範囲内にあるため)。2012年に実行した問合せで、RRの年の値として98を指定した場合は、前世紀(20世紀)の末尾98の年(1998年)と見なされます(98が50~99の範囲内にあるため)。, リスト1の問合せでは、この記事のサンプル・スキーマ内にあるEMPLOYEE表を利用します。この問合せによって、雇用日が新しい順でソートされた従業員情報が表示されます。ご覧のとおり、雇用日のデータはDD-MON-RRという書式で表示されます。たとえば、Roger Friedliは16-MAY-07に雇用されています。このデータの表示方法を変更するには、TO_CHAR変換関数を任意の書式モデルとともに使用します(TO_CHARについては前回の記事で、数値をテキスト文字列に変換するために使用できることを簡単に紹介しました)。, コード・リスト1:Oracle Databaseのデフォルトの日付書式による日付データの表示, リスト2の問合せで、リスト1での日付データの表示方法を変更します。DATEデータ型のデータを特定の日付書式モデルに変換するためのTO_CHARは、必須パラメータ1つとオプションのパラメータ1つを指定します。必須パラメータは、列、式、またはリテラルのDATEデータ型のデータです。オプションのパラメータは、表示される日付の書式マスクをテキストで表現したものです。リスト2では、DD-MON-RRというデフォルトの書式マスクを、YYYY-MM-DDと表示するように変更しています。, コード・リスト2:TO_CHARを書式マスク付きで使用して、異なる書式で日付データを表示する例, リスト3の例では、TO_CHARの第2パラメータがオプションであることがわかります。このパラメータを指定しない場合、返される日付データの書式マスクは単にデフォルトの書式マスクです。また、返される日付のデータ型がVARCHAR2である点にも注意が必要です。リスト3の出力はHIRE_DATEの降順でソートされていますが、日付ではなく文字の降順です。TO_CHAR変換関数を適用するとデータが文字列として返されるため、それに応じた計画とソートが必要です。, コード・リスト3:オプションのパラメータを指定しない場合にデフォルトの日付書式マスクが使用される例, 日付を文字列に変換できるのと同様に、文字列リテラルを日付に変換できます。その結果の式は、他のDATEデータ型列のデータや他の日付式と比較できます。この変換は、テキスト文字列にTO_DATE変換関数を適用することで実行します(リスト4を参照)。リスト4の問合せでは、HIRE_DATEの値が01-JAN-2008という日付値よりも大きい従業員がすべて返されます。また、リスト4より、TO_DATE変換関数はSELECT構文のリスト内でもWHERE句内でも使用できることがわかります。TO_DATE関数は01-JAN-2008という文字列リテラルに適用されます。この際に、指定したリテラルを日付としてデータベースで解釈できるようにするための書式マスクも記述しています。, TO_DATE関数に書式マスクを指定する場合には、指定する文字列リテラル内で使用されるマスクと同じものを選択する必要があります。この2つが異なると、リスト5のようなエラー・メッセージが表示されます。テキスト・リテラルを変換する際には、TO_DATE変換関数を使用して適切な書式マスクを明示的に指定することをお勧めします。このようにすれば、データベース、インスタンス、またはセッションのデフォルトの日付設定が何であっても、記述した文が独立して解釈されます。, Oracle Databaseでは、可能な場合に日付の暗黙的変換が実行されます。この変換が実行されるのは、リテラルがすでにデフォルトの日付書式で指定されている場合(のみ)です。ただし、暗黙的変換を実行しないようにすることをお勧めします。暗黙的変換を実行するようなコードは脆弱で、長期的に機能する可能性が低いからです。


Oracleで日付を和暦で取得するにはTO_CHARのパラメータに和暦を指定します。和暦は第3パラメーターをNLS_CALENDAR = JAPANESE IMPERIALとします。