Oracle Databaseには、ローマ数字を使用して日付から月を返す機能があります。
たとえば、月が8月の場合、10進数の値は08になり、同等のローマ数字はVIIIになります。
これを行う方法は、RM
を使用することです。 またはrm
フォーマットマスクのフォーマット要素。これにより、それぞれ大文字または小文字のローマ数字を使用して月がフォーマットされます。
日付形式の指定は、いくつかの場所で行うことができます。
TO_CHAR(datetime)
で日付をフォーマットするときにローマ数字を指定する例を次に示します。 機能:
SELECT TO_CHAR(DATE '2035-08-11', 'DD RM YYYY') FROM DUAL;
結果:
11 VIII 2035
この場合、大文字のローマ数字を指定しました。
小文字を指定するには、RM
を変更するだけです。 rm
へ :
SELECT TO_CHAR(DATE '2035-08-11', 'DD rm YYYY') FROM DUAL;
結果:
11 viii 2035
日時値のフォーマットに使用できるフォーマット要素の完全なリストについては、Oracleの日時フォーマット要素のリストを参照してください。
または、セッション全体の日付形式を設定することもできます。これは、日付を返す関数呼び出しを多数実行する必要がある場合に役立ちます。
関連するパラメータは3つあります:NLS_DATE_FORMAT
、NLS_TIMESTAMP_FORMAT
、およびNLS_TIMESTAMP_TZ_FORMAT
。
これらのパラメータには、NLS_TERRITORY
から派生したデフォルト値があります パラメータ(オペレーティングシステムに依存するデフォルト値があります)。ただし、必要に応じて、現在のセッションのこれらのパラメータを更新できます。
これらのパラメータを更新して、月の部分にローマ数字を含む日付形式を使用する例を次に示します。
ALTER SESSION SET NLS_DATE_FORMAT = 'DD RM YYYY';
ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'DD RM YYYY HH12:MI:SSXFF AM';
ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT = 'DD RM YYYY HH12:MI:SSXFF AM TZR';
結果:
Session altered. Session altered. Session altered.
これで、日時の値を返す関数を呼び出すと、月がローマ数字で表示されます。
例:
SELECT TO_CHAR(SYSDATE) FROM DUAL;
結果:
10 VIII 2021
SYSDATE
を渡したことに注意してください TO_CHAR()
へ 。
そうしないと、NLS_DATE_FORMAT
パラメータが有効にならない:
SELECT SYSDATE FROM DUAL;
結果:
2021-08-10 20:04:49
この問題は、他の日付形式には存在しません。ローマ数字でしか出会えませんでした。
上記の例は、月をローマ数字で返すための一時的な解決策です。より永続的な解決策として、NLSパラメーターは、データベースレベル、初期化パラメーターファイル、または環境変数で設定できます。これらの例、および相互の優先順位については、NLSパラメーターの設定方法とその優先順位を参照してください。