このトピックでは、PolarDB for PostgreSQL (Compatible with Oracle) 分散リレーショナルデータベースサービス (DRDS) でサポートされる日付と時刻のデータ型について説明します。
| データと時間の種類 | ストレージサイズ | 説明 | 最小値 | 最大値 | 精度 |
| 日付 | 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 マイクロ秒 |
| 時間 [(p)] | 8 バイト | 1日の時間だけ。 | 00:00:00 | 24:00:00 | 1ミリ秒 /14ビット |
| タイムゾーン付きTIME [(p)] | 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内の次の値の意味:
インターバル '1 2:34:5.678 '2日目 (3)ある日、2時間34分5秒、678千分の1秒。
インターバル '1 23 'デイトゥアワー1日23時間。
インターバル「2:34」分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内の次の値の意味:
インターバル「12-3」年から月12年と3ヶ月。
インターバル「45」年45年だ
インターバル「300」月25年だ
日付と時間の入力
日付と時刻の入力は、ISO 8601 SQL互換形式、Oracleのデフォルトのdd-MON-yy形式、および明確な年、月、日の値を持つその他の形式です。 ただし、あいまいさを避けるために TO_DATE 関数を使用することを推奨します。
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形式で表示します。
| Format | 例 |
| Redwood 方式 | 31-DEC-05 07:37:16 |
| ISO 8601/SQL 標準 | 1997-12-17 07:37:16 |
内部フォーマット
PolarDBは、Julianの日付を使用してすべての日付と時刻の値を計算します。 毎年365.2425日があると仮定します。 この場合、ジュリアンの日付を使用して、紀元前4713年以降の日付を正しく予測および計算できます。