Oracle では、「select sysdate from Dual;」ステートメントを使用して、時刻形式をクエリできます。select ステートメントは、データに対して単純なクエリを実行できます。このステートメントは、出力日付の形式を設定するために使用されます。
このチュートリアルの動作環境: Windows 10 システム、Oracle 11g バージョン、Dell G3 コンピューター。
1. Oracle は時間形式のデータを保存します
Oracle は、7 バイトを占める特定の記憶形式で時間を保存します。クエリによって表示される時間には関係ありません。保存される時刻には、年、月、日、時、分、秒が含まれます。最小精度は秒です。秒未満の時間単位は保存されません。したがって、ミリ秒レベルをサポートする一部のフロントエンド プログラム (PB クライアント プログラムなど) が Oracle データベースに接続する場合は、この点に注意する必要があります。クエリ中に表示される時刻形式は、セッション環境によって決定されるか、ユーザーによって定義され、データベースとは関係ありません
2. Oracle 時刻表示形式
通常、クライアントおよびデータベース 接続が確立されると、Oracle は使用される文字セットに関連するデフォルトの時刻形式のデータ表示フォームを提供します。通常、時、分、秒の代わりに、年、月、日が表示されます。たとえば、us7ascii 文字セット (または他の英語文字セット) を使用する場合、デフォルトの時刻形式は 28-Jan-2003 と表示され、zhs16gbk 文字セット (または他の中国語文字セット) を使用する場合、デフォルトの時刻形式は次のように表示されます。は、:2003- January-28 として表示されます。テーブルにデータを挿入するときに、変換関数を使用しない場合は、時刻フィールドの形式がセッション環境の時刻形式に準拠している必要があります。そうしないと、挿入を実行できません。現在のセッションの時間形式を表示するには、次の SQL ステートメントを使用できます:
SQL> select sysdate from dual;
3. 時間形式のデータを Oracle テーブルに挿入します
時間形式を挿入しますOracle テーブルへのデータの作成は比較的面倒なので、現在のセッションの時刻形式に厳密に従って時刻値を書き込むか、変換関数を使用して時刻データの形式をカスタマイズします。時間に関連する変換関数は、to_char と to_date の 2 つです。 to_char (時刻値、時刻形式) 関数は時刻値を文字列形式に変換し、通常はクエリで使用されます。to_date (文字列、時刻形式) 関数は形式文字列を時刻値に変換し、通常は挿入ステートメントで使用されます
4 セッションの日付形式を変更する方法
現在のセッションの日付形式を変更するには 3 つの方法があると言われていますが、私は最初の 2 つの方法だけを試しました。 , glogin.sqlを修正する ファイル方式は試していないので、本当にうまくいくかはわかりません。以下に一つずつ説明していきます。
(1) sql*plus
SQL> で現在のセッションの日付形式を変更します alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss'; 日付を変更します現在のセッションの形式 時刻形式は、2003-01-28 15:23:38 の形式に変更されます。つまり、年 4 桁、月 2 桁、日 2 桁、スペース、および24 時間制の時:分:秒。
この変更方法は、現在のセッションでのみ有効です。これは現在の sql*plus ウィンドウではなく、現在のセッションに関するものであることに注意してください。つまり、
## がこのように変更され、connect コマンドを使用して別のユーザーとしてデータベースに接続するか、別のデータベースに接続すると、日付形式が無効になり、元の形式に戻ります。デフォルトの日付形式。 (2) レジストリの変更 (Windows システムのみ)レジストリの hkey_local_machinesoftwareoraclehome0 の主キーに文字列 (8i バージョン) を追加します。文字列名は nls_date_format、値は文字列の部分は、定義する時刻形式 (yyyy-mm-dd hh24:mi:ss など) です。その後、sql*plus を再起動します。 この変更方法は sql*plus ウィンドウに対して有効です。つまり、sql*plus ウィンドウをいくつ開いても、この時刻形式がデフォルトになります。サーバー側レジストリの変更は無効です。クライアント側レジストリの変更のみ有効です。 (3) $oracle_homesqlplusadmin ディレクトリの glogin.sql ファイルを変更します私はこの方法を試したことがないので、皆さんの誤解を招かないように、あえて適当には言いません。この方法に詳しい専門家のアドバイスをお願いします。5 日付形式の優先順位
特定の環境で、alter session コマンドを使用してレジストリと現在のセッションの両方が変更される場合、どの変更方法が変更されるか動作しますか? alter session コマンドは有効であり、最も高い優先順位を持っています。つまり、現在のクライアント環境がどのようなものであれ、レジストリがどのように変更されたとしても、alter session コマンドを使用して時刻形式を変更する限り、変更した時刻形式は許可されます。したがって、sql*plus 対話型クエリを直接使用する場合、または時刻形式のデータを挿入する場合は、両方の方法を使用できます。 SQL ファイルをバッチ挿入またはスケジュールされた実行に使用する場合は、時間データを使用する前に、alter session コマンドを使用してセッションを変更し、この SQL ステートメントの通常の操作が環境と無関係であることを確認することをお勧めします。同様に、フロントエンド クライアント プログラムで時刻形式のデータを使用する必要がある場合は、使用前にセッションを変更するか、to_char または to_date 関数を使用して変換することをお勧めします (変換関数の使用を強くお勧めします)。プログラムは環境に応じて実行されます。何もする必要はありません。 #########まとめ:######Oracle データベースでは、時間型データ、特に時間データの計算に多くの関数が定義されており、非常に便利です。もちろん、利便性の前提として、Oracle の時間関数に精通している必要があります。ここで、時刻型データを格納する際に文字列型フィールドを使用している人を時々見かけますが、システムのオーバーヘッド、時刻データの計算、時刻データの抽出の観点から、私はこのアプローチには強く反対します。このデータ (月を適切に取得する、週を適切に取得するなど) は、時間型データとして直接保存するほど便利ではありません。 Oracle の時間関数に精通している限り、Oracle 時間型データは誰でも気に入っていただけると思います。これは非常に柔軟で強力です。時間について考えられるほぼすべてのことが可能です。Oracle 時間についての理解次第です。関数マスタリー
推奨チュートリアル: 「Oracle ビデオ チュートリアル」
以上がOracle で時刻形式をクエリする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。