このトピックでは、 分散リレーショナルデータベースサービス (DRDS) でサポートされる日付と時刻のデータ型について説明します。
以下の日付と時刻の種類に関する説明では、テーブルが作成または変更されたときに、polar_comp_redwood_date設定パラメーターがtrueに設定されていると仮定します。
データと時間の種類 | ストレージサイズ | 説明 | 最小値 | 最大値 | 精度 |
DATE | 8 バイト | タイムゾーンのない日付と時刻。 | 4713 BC | 5874897 AD | 1 秒 |
INTERVAL DAY TO SECOND [(p)] | 12 バイト | カスタム精度の期間。 | -178000000 年 | 178000000 年 | 1マイクロ秒 /14ビット |
INTERVAL YEAR TO MONTH | 12 バイト | 時間範囲のリスト。 | -178000000 年 | 178000000 年 | 1マイクロ秒 /14ビット |
TIMESTAMP [(p)] | 8 バイト | 日付と時刻のタイムスタンプ。 | 4713 BC | 5874897 AD | 1 マイクロ秒 |
TIMESTAMP [(p)] WITH TIME ZONE | 8 バイト | タイムゾーンの日付と時刻のタイムスタンプ。 | 4713 BC | 5874897 AD | 1 マイクロ秒 |
TIME [(p)] | 8 バイト | 1日の時間だけ。 | 00:00:00 | 24:00:00 | 1ミリ秒 /14ビット |
TIME [(p)] WITH TIME ZONE | 12 バイト | タイムゾーンを持つ1日の時間のみ。 | 00:00:00 + 1459 | 24:00:00-1459 | 1ミリ秒 /14ビット |
DATEキーワードが、CREATE tableやALTER TABLEなどのデータ定義言語 (DDL) ステートメントでデータベーステーブルの列のデータ型として表示されるとします。 この場合、テーブルの定義がデータベースに保存されているときに、DATE値が自動的にTIMESTAMP(0)
型に変換されます。 したがって、DATE値の時間フィールドも列に格納されます。
次のいずれかの状況が発生したとします。DATEキーワードは、ストアドプロシージャ言語 (SPL) 宣言セクションの変数のデータ型として表示されます。 DATEキーワードは、SPLプロシージャまたはSPL関数の仮パラメーターのデータ型として表示されます。 DATEキーワードは、SPL関数の出力として表示されます。 この場合、DATE値はTIMESTAMP(0)
型に変換されます。 したがって、DATEは時間フィールドも処理できます。
TIMESTAMPは、秒フィールドに保持される分数桁数を指定するオプションの精度値pを受け入れます。 pの有効な値は0〜6の範囲である。 デフォルト値は 6 です。
デフォルトでは、TIMESTAMP値は倍精度浮動小数点数として格納されます。 この場合、精度の有効限界は6未満とすることができる。 TIMESTAMP 値は、2000 年 1 月 1 日の午前 0 時の前後の秒数として格納されます。 マイクロ秒の精度は、2000年1月1日の数年以内の日付で達成されますが、それ以降の日付では精度が低下します。 TIMESTAMP値がコンパイル時オプションである8バイトの整数として格納されている場合、マイクロ秒の精度は値の全範囲で使用できます。 ただし、8バイトの整数タイムスタンプの日付の範囲は、前の表に記載されている日付よりも制限されています。 この値は、4713 BC〜294276 ADの範囲である。
TIMESTAMP (p) WITH TIME ZONEはTIMESTAMP (p) と似ていますが、前者のタイプにはタイムゾーンが含まれています。
INTERVALタイプ
INTERVAL 値は期間を指定します。 INTERVAL型の値は、データ値を記述するフィールドで構成されます。 次の表に、INTERVAL型で使用できるフィールドを示します。
フィールド | 有効値 |
YEAR | 整数値 (正または負) 。 |
MONTH | 0から11。 |
DAY | 整数値 (正または負) 。 |
HOUR | 0から23。 |
MINUTE | 0から59。 |
SECOND | ここで、59.9(p) は分数秒の精度である。 |
フィールドは、YEARSからMONTHS、DAYSからHOURS、MINUTESからSECONDSの降順で表示する必要があります。
PolarDBは、Oracleと互換性のある2つのINTERVAL型をサポートします。
PolarDBによってサポートされる第1の変数は、INTERVAL DAY TO SECOND [(p)] である。 この変数には、日、時間、分、秒単位の時間間隔が格納されます。
説明p は、秒フィールドの精度を指定します。
PolarDB内の次の値の意味:
INTERVAL '1 2:34:5.678' DAY TO SECOND(3)
ある日、2時間34分5秒、678千分の1秒。
INTERVAL '1 23' DAY TO HOUR
1日23時間。
INTERVAL '2:34' HOUR TO MINUTE
2時間34分。
INTERVAL '2:34:56.129 'HOUR TO SECOND(2)
2時間、34分、56秒、1千分の1秒。
説明指定された精度のため、分数秒は13に切り上げられます。
PolarDBでサポートされる2番目のOracle互換変数は、INTERVAL YEAR TO MONTHです。 この変数は、年と月の時間間隔を格納します。
PolarDB内の次の値の意味:
INTERVAL '12-3' YEAR TO MONTH
12年と3ヶ月。
INTERVAL '45' YEAR
45年だ
INTERVAL '300' MONTH
25年だ
日付と時間の入力
日付と時刻の入力は、ISO 8601 SQL互換形式、Oracleのデフォルトのdd-MON-yy形式、および明確な年、月、日の値を持つその他の形式です。 ただし、あいまいさを避けるために TO_DATE 関数を使用することを推奨します。
各日付または時刻の入力は、テキスト文字列の形式で単一引用符 (') で囲む必要があります。 次の標準SQL構文を使用できます。
type 'value' type
タイプはDATEまたはTIMESTAMPです。
値は日付または時刻の文字列です。
日付
次の日付の入力形式がサポートされています。 各値は1999年1月8日に相当します。
January 8, 1999
1999-01-08
1999-Jan-08
Jan-08-1999
08-Jan-1999
08-Jan-99
Jan-08-99
19990108
990108
日付値は、DATE 列または TIMESTAMP 列または変数に割り当てることができます。 時間、分、および秒のフィールドは、DATE値に時間値が付加されない場合、ゼロに設定される。
時間
次の表に、日付またはタイムスタンプのサンプル時間フィールドを示します。
例
説明
04:05:06.789
ISO 8601
04:05:06
ISO 8601
04:05
ISO 8601
040506
ISO 8601
04:05 AM
04:05に相当する。 AMは値に影響しません。
04:05 PM
16:05に相当します。 時間の値は12以下でなければなりません。
04:05:06.789-8
ISO 8601
04:05:06-08:00
ISO 8601
04:05-08:00
ISO 8601
040506-08
ISO 8601
04:05:06 PST
タイムゾーンの省略形。
2003-04-12 04:05:06アメリカ /New_York
名前で宣言されたタイムゾーン。
Timestamp
タイムスタンプの有効な入力は、日付と時刻で構成されます。 タイムスタンプの日付フィールドは、日付の前述の入力形式に基づいてフォーマットできます。 タイムスタンプの時間フィールドは、時間の前の入力形式に基づいてフォーマットできます。
次の例では、Oracleのデフォルトの形式が使用されています。
08-1月99 04:05:06
次の例では、ISO 8601標準フォーマットが使用されます。
1999-01-08 04:05:06
日付と時間出力
日付と時刻タイプのデフォルトの出力形式は、dd-MON-yyまたはyyyy-mm-ddです。 dd-MON-yyはOracleと互換性があり、Redwoodの日付形式と呼ばれます。 yyyy-mm-ddは、データベースプログラミングインターフェイスによって決定されるISO 8601形式です。 SQLインタラクションにJava Database Connectivity (JDBC) を使用するプログラムは、ISO 8601形式で日付を表示します。 PSQLなどの他のプログラムは、日付をRedwood形式で表示します。
次の表に、RedwoodおよびISO 8601形式の出力の例を示します。
Format | 例 |
Redwood 方式 | 31-DEC-05 07:37:16 |
ISO 8601/SQL 標準 | 1997-12-17 07:37:16 |
内部フォーマット
PolarDBは、Julianの日付を使用してすべての日付と時刻の値を計算します。 毎年365.2425日があると仮定します。 この場合、ジュリアンの日付を使用して、紀元前4713年以降の日付を正しく予測および計算できます。