日付時刻書式モデル(Datetime Format Models)は、データベースに格納される日付時刻データの形式を指定します。
日付時刻書式モデルの総長は22文字を超えてはなりません。デフォルトではない形式の文字列を日付時刻形式の値に変換する必要がある場合、関数内で日付時刻書式モデルを使用できます。
日付時刻書式モデルは、1つまたは複数の日付時刻書式要素で構成されています。文字列値を日付値に変換するには、一定の変換ルールに従う必要があります。詳細については、文字列から日付への変換ルールを参照してください。
RR 日付時刻書式要素は YY 日付時刻書式要素と類似していますが、世紀をまたぐ日付値の格納において追加の柔軟性を提供します。RR 日付時刻書式要素については、RR 日付時刻書式要素を参照してください。
関数における日付時刻書式モデル
日付時刻書式モデルは、以下の関数で使用できます:
デフォルトではない形式の文字列を日付時刻値に変換する場合、
TO_DATE、TO_TIMESTAMP、TO_TIMESTAMP_TZ関数のパラメータで日付時刻の書式を指定する必要があります。日付時刻値をデフォルトではない形式の文字列に変換する場合、
TO_CHAR関数のパラメータで出力文字列の書式を指定する必要があります。
ユーザーが書式を指定しない場合、デフォルトの書式が使用されて変換が行われます。システム変数 NLS_DATE_FORMAT、NLS_TIMESTAMP_FORMAT または NLS_TIMESTAMP_TZ_FORMAT を使用して、デフォルトの日付時刻書式を明示的に指定できます。これらの変数の値は V$NLS_PARAMETERS システムビューで確認でき、ALTER SESSION または ALTER SYSTEM コマンドで変数の値を変更できます。
日付時刻書式モデルの要素
日付時刻書式モデルは、1つ以上の日付時刻書式モデル要素で構成されます。OceanBaseデータベースでサポートされている書式モデル要素については、日付時刻書式モデル要素表を参照してください。
書式が入力文字列の解析に使用される場合、同じ書式要素を2回使用することはできません。類似した情報を表す書式要素を組み合わせることもできません。例えば、日付時刻書式で
SYYYYとBC要素を同時に使用することはできません。このルールは、情報の冗長さによる競合を避けるためです。一部の要素は
TO_CHAR、TO_DATE、TO_TIMESTAMP、およびTO_TIMESTAMP_TZ関数では使用できません。日付時刻書式モデル要素
FF、TZD、TZH、TZM、およびTZRは、タイムスタンプや間隔型の書式には含めることができますが、DATE型の書式には含めることができません。一部の要素は固定長の文字列を生成します。長さが足りない場合、末尾にスペースが追加されます。
注意
4桁の年要素(
YYYY)の使用を推奨します。年要素が短いと、年は実行時にのみ特定できるため、クエリの最適化に影響します。
日付時刻フォーマット要素表
要素 |
TO_* 関数での使用は? |
説明 |
|---|---|---|
| - / , 。 ; : "テキスト" | はい | シンボル文字列定数。 |
| AD A.D. | はい | 公元紀元を表します。ピリオドの有無は任意です。 |
| AM A.M. | はい | 午前を表します。ピリオドの有無は任意です。 |
| BC B.C. | はい | 紀元前の年を表します。ピリオドの有無は任意です。 |
| CC SCC | いいえ | 世紀を表します。 |
| D | はい | 1週間の何日目か(1~7)。 |
| DAY | はい | 日の名前。結果の長さは固定されており、名前の最大長と同じです。 |
| DD | はい | 1か月の何日目か(1~31)。 |
| DDD | はい | 1年の何日目か(1~366)。 |
| DY | はい | 日の名前の略称。 |
| FF [1..9] | はい | 小数秒。1~9の数字を使用して、戻り値の小数秒部分の桁数、つまり精度を指定します。デフォルトは日付時刻データ型が指定する精度です。タイムスタンプと間隔形式で有効ですが、DATE 形式では無効です。 |
| HH | はい | 時間(1~12)。 |
| HH12 | いいえ | 時間(1~12)。12時間制。 |
| HH24 | はい | 時間(0~23)。24時間制。 |
| IW | いいえ | 1年の何週目か(1~52または1~53)、ISO規格に基づきます。 |
| IYY IY I | いいえ | ISO年の末尾3、2、または1文字。 |
| IYYY | いいえ | ISO規格に基づく4文字の年。 |
| J | はい | ユリウス日 |
| MI | はい | 分(0~59)。 |
| MM | はい | 月(01~12)。1月は01と表記し、以降同様に続けます。 |
| MON | はい | 月の略称。 |
| MONTH | はい | 月の名前。結果の長さは固定されており、名前の最大長と同じです。 |
| PM P.M. | いいえ | 午後を表します。ピリオドの有無は任意です。 |
| Q | いいえ | 四半期(1、2、3、4)。1月~3月は第1四半期、以降同様に続けます。 |
| RR | はい | 年の下2桁。世紀は入力された2桁と現在の年が上半世紀か下半世紀かによって決まります。現在が上半世紀の場合、0~49年を入力すると結果は現在の世紀、50~99年を入力すると結果は前の世紀になります。例えば、現在が2060年の場合、0~49年を入力すると結果は次の世紀、55~99年を入力すると結果は現在の世紀になります。 |
| RRRR | はい | 年。4桁または2桁の入力を受け付けます。2桁の場合はRRと同じです。 |
| SS | はい | 秒(0~59)。 |
| SSSSS | はい | 当日の秒数(0~86400)。 |
| TZD | はい | 夏時間情報を含むタイムゾーンの略称。例:PSTはUS/Pacific標準時を表し、PDTはUS/Pacific夏時間を表します。タイムスタンプおよび間隔形式では有効ですが、DATE形式では無効です。 |
| TZH | はい | タイムゾーンの時刻部分。タイムスタンプおよび間隔形式では有効ですが、DATE形式では無効です。 |
| TZM | はい | タイムゾーンの分部分。タイムスタンプおよび間隔形式では有効ですが、DATE形式では無効です。 |
| TZR | はい | タイムゾーンの地域情報。例:US/Pacific。タイムスタンプおよび間隔形式では有効ですが、DATE形式では無効です。 |
| WW | いいえ | 一年の何週目(1~53)。 |
| W | いいえ | 一か月の何週目(1~5)。 |
| X | はい | 小数部を区切るローカルの文字。例:"HH:MI:SSXFF"。 |
| Y,YYY | はい | コンマ付きの年。 |
| YEAR SYEAR | いいえ | 詳細な年。 |
| YYYY | はい | 4桁の数字で表す年。現在のバージョンでは紀元前の日付はサポートされていません。 |
| YYY YY Y | はい | 年の下3、2、または1桁の数字。 |
説明
日付時刻関数とは、TO_CHAR、TO_DATE、TO_TIMESTAMP、および TO_TIMESTAMP_TZ を指します。 注意
- 表に示されている変換では、入力された文字列の日付がフォーマット要素と一致している必要があります。一致しない場合はエラーが発生します。
- OceanBaseデータベースのデフォルトの日付形式は DD-MON-RR です。上記の形式で表示するには、
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';を実行して、現在のセッションの日付時刻形式を変更できます。
フォーマット文字列から一部の要素が欠落している場合、システムから次のようなエラーメッセージが返されます:
obclient> SELECT TO_DATE( '31 Aug 2020', 'DD MON YYY' ) FROM DUAL;
OBE-01830: date format picture ends before converting entire input string
日付フォーマットモデル要素の大文字
フォーマット内の要素の大文字と小文字は、生成される文字列の大文字と小文字に影響します。例えば、日付フォーマット要素 DAY は MONDAY を生成し、Day は Monday を生成し、day は小文字の monday を生成します。例を以下に示します。
obclient> SELECT TO_CHAR(sysdate,'mon') AS nowMonth FROM DUAL;
+----------+
| NOWMONTH |
+----------+
| mar |
+----------+
1 row in set
obclient> SELECT TO_CHAR(sysdate,'MON') AS nowMonth FROM DUAL;
+----------+
| NOWMONTH |
+----------+
| MAR |
+----------+
1 row in set
日時フォーマットモデルの句読点と文字列定数
ユーザーはフォーマットに以下の文字を含めることができます。これらの文字が返される値において現れる位置は、フォーマットモデル内の文字の位置と同じです。
句読点。例:ハイフン、スラッシュ、カンマ、ピリオド、コロン。
文字列定数。二重引用符で囲みます。
OceanBaseデータベースは、文字列を日付に柔軟に変換できます。TO_DATE 関数を使用する場合、入力文字列の各数字要素がフォーマットモデルで許可されている最大桁数を含んでいれば、フォーマット文字列は入力された文字列と一致します。
例
例1:フォーマット要素は MM/YY で、02 が MM に、07 が YY に対応します。
obclient> SELECT TO_CHAR(TO_DATE('0207','MM/YY'),'MM/YY') FROM DUAL; +------------------------------------------+ | TO_CHAR(TO_DATE('0207','MM/YY'),'MM/YY') | +------------------------------------------+ | 02/07 | +------------------------------------------+ 1 row in set例2:OceanBaseデータベースは、非英字数字の文字がフォーマット内の句読点文字と一致することを許可しています。# が / に対応します。
obclient> SELECT TO_CHAR (TO_DATE('02#07','MM/YY'), 'MM/YY') FROM DUAL; +-------------------------------------------+ | TO_CHAR(TO_DATE('02#07','MM/YY'),'MM/YY') | +-------------------------------------------+ | 02/07 | +-------------------------------------------+ 1 row in set
日付フォーマット要素とグローバル化のサポート
OceanBaseデータベースでは、日付時刻フォーマット要素の言語はパラメータ NLS_DATE_LANGUAGE および NLS_LANGUAGE で指定できます。デフォルト値は AMERICAN であり、変更はできません。そのため、グローバル化はサポートされていません。
例:日付時刻フォーマットの言語パラメータはデフォルトで American に設定されており、他の言語はサポートされていません。
SELECT TO_CHAR (SYSDATE, 'DD/MON/YYYY', 'nls_date_language=''Traditional Chinese'' ') FROM DUAL;
クエリ結果にエラーが表示されました。言語パラメータがサポートされていません。
OBE-12702: invalid NLS parameter string used in SQL function