日付時刻書式モデル(Datetime Format Models)は、データベースに格納される日付時刻データの形式を指定します。
日付時刻書式モデルの総長は22文字を超えてはなりません。デフォルトではない形式の文字列を日付時刻形式の値に変換する必要がある場合、関数内で日付時刻書式モデルを使用できます。
日付時刻書式モデルは、以下の関数で使用できます:
デフォルトではない形式の文字列を日付時刻値に変換する際には、
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日から7日までの曜日です。 |
| DAY | 可 | 日付の曜日名です。結果の長さは固定されており、曜日名の最大長と同じになります。 |
| DD | 可 | 1月から31日までの日付です。 |
| DDD | はい | 年の日付(1~366)。 |
| DY | はい | 日の略称。 |
| FF [1..9] | はい | 小数秒。1~9の数字を使用して、戻り値の小数秒部分の桁数、つまり精度を指定します。 デフォルトでは、日時データ型で指定された精度が適用されます。 タイムスタンプと間隔形式で有効ですが、DATE 形式では無効です。 |
| HH | はい | 時間(1~12)。 |
| HH12 | × | 時間(1~12)。12時間表記法 |
| HH24 | √ | 時間(0~23)。24時間表記法 |
| IW | × | ISO基準による年の第何週(1~52または1~53)。 |
| 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 SYYYY | √ | 四桁の年号。Sは西暦紀元前の日付を表すためのマイナス記号を示します。 |
| 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