日付/時刻のデータ・タイプには、DATE、TIME、および TIMESTAMP などがあります。 日付/時刻の値は、 特定の算術演算およびストリング操作で使用することができ、 特定のストリングとは互換性がありますが、 これはストリングでも数字でもありません。
日付 (date) は、 年、月、日の 3 つの部分からなる値です。年の部分の範囲は 0001 から 9999 です。 月の部分の範囲は 1 から 12 です。 日の部分の範囲は 1 から x です (x は月によって異なります)。
日付の内部表示は 4 バイトのストリングです。 各バイトは、2 桁のパック 10 進数からなります。 最初の 2 バイトは年、3 番目のバイトは月、最後のバイトは日です。
DATE 列の長さは、SQLDA の項で説明するように、10 バイトです。 これは、日付の値を文字ストリングで表記するために適した長さになっています。
時刻 (time) は、 時、分、秒の 3 つの部分からなる値であり、 24 時間制の時刻を表します。時の部分の範囲は 0 から 24。それ以外の部分の範囲は 0 から 59 です。 時が 24 の場合、分と秒の指定はゼロになります。
時刻の内部表示は 3 バイトのストリングです。 各バイトは、2 桁のパック 10 進数からなります。 最初のバイトは時、2 番目のバイトは分、最後のバイトは秒です。
TIME 列の長さは、SQLDA の項で説明するように、8 バイトです。 これは、時刻の値を文字ストリングで表記するために適した長さになっています。
タイム・スタンプ (timestamp) は、 6 つ、または 7 つの部分 (年、月、日、時、分、秒、およびオプションの小数秒) から成っており、 時刻に秒の小数部を指定する追加部分を含めることも可能な点以外は、 上記の定義と同様に日時を示します。小数秒の桁数は、0 から 12 までの範囲の属性 (デフォルトは 6) を使用して指定します。
タイム・スタンプの内部表示は、7 バイトから 13 バイトのストリングです。 各バイトは、2 桁のパック 10 進数からなります。 最初の 4 バイトは日付、次の 3 バイトは時刻、 最後の 0 から 6 バイトは小数秒です。
SQLDA に記述されている TIMESTAMP 列の長さは 19 から 32 バイトです。 これは、値の文字ストリング表示に適した長さです。
データ・タイプが DATE、TIME、または TIMESTAMP の値は、 ユーザーが意識することのない内部形式で表されます。 ただし、日付、時刻、およびタイム・スタンプの値は、 ストリングで表すこともできます。 データ・タイプが DATE、TIME、または TIMESTAMP である定数や変数がないため、 この表示方法は便利です。 日付/時刻の値を取り出すには、 この値をストリング変数に割り当てる必要があります。 CHAR または GRAPHIC 関数 (Unicode データベース用のみ) を使用すると、 日付/時刻値をストリング表記に変更することができます。 通常、ストリング表記は、プログラムがプリコンパイルされるときか、 またはデータベースにバインドされるときに、 DATETIME オプションの指定によってオーバーライドされるのでない限り、 アプリケーションのテリトリー・コードに関連する日付/時刻の値のデフォルトの形式になります。
ラージ・オブジェクト・ストリングは、その長さに関係なく、日付/時刻値のストリング表記として使用することはできません (SQLSTATE 42884)。
日付/時刻の値の有効なストリング表記が内部の日付/時刻の値の操作に使用される場合、 ストリング表記が日付、時刻、またはタイム・スタンプの値の内部形式に変換されてから、 操作が実行されます。
日付、時刻、およびタイム・スタンプのストリングでは、 文字と数字しか使用することができません。
日付のストリング表示は、数字で始まり、 長さが 8 バイト以上のストリングです。 末尾のブランクを付けることができます。 月と日の部分の先行ゼロは省略可能です。
日付を示す有効なストリング・フォーマットを、以下の表に示します。 各フォーマットは、名前および関連する省略形によって識別されます。
フォーマット名 | 省略形 | 日付フォーマット | 例 |
---|---|---|---|
国際標準化機構 | ISO | yyyy-mm-dd | 1991-10-27 |
IBM® USA 標準規格 | USA | mm/dd/yyyy | 10/27/1991 |
IBM 欧州標準規格 | EUR | dd.mm.yyyy | 27.10.1991 |
日本工業規格西暦 | JIS | yyyy-mm-dd | 1991-10-27 |
地域別定義 | LOC | アプリケーションのテリトリー・コードに依存します。 | - |
時刻のストリング表記は、数字で始まり、 長さが 4 バイト以上のストリングです。 末尾にブランクを付けることができます。 時刻の時部分の先行ゼロは省略可能であり、 秒は完全に省略することができます。 秒が省略されている場合は、0 秒が指定されたと見なされます。 したがって、13:30 は 13:30:00 に等しくなります。
時刻を示す有効なストリング・フォーマットを、以下の表に示します。 各フォーマットは、名前および関連する省略形によって識別されます。
フォーマット名 | 省略形 | 時刻フォーマット | 例 |
---|---|---|---|
国際標準化機構 | ISO | hh.mm.ss | 13.30.05 |
IBM USA 標準規格 | USA | hh:mm AM または PM | 1:30 PM |
IBM 欧州標準規格 | EUR | hh.mm.ss | 13.30.05 |
日本工業規格西暦 | JIS | hh:mm:ss | 13:30:05 |
地域別定義 | LOC | アプリケーションのテリトリー・コードに依存します。 | - |
タイム・スタンプのストリング表記は、数字で始まり、 長さが 16 バイト以上のストリングです。 タイム・スタンプの完全なストリング表示は、 yyyy-mm-dd-hh.mm.ss または yyyy-mm-dd-hh.mm.ss.nnnnnnnnnnnn という形式です (小数秒の桁数は 0 から 12 までの範囲の値を指定可能)。末尾のブランクを付けることができます。 タイム・スタンプの月、日、および時の部分の先行ゼロは省略できます。後続ゼロは、切り捨てるか、または小数秒からすべて省略できます。 タイム・スタンプのストリング表記が TIMESTAMP データ・タイプの値に暗黙的にキャストされる場合、キャストの結果のタイム・スタンプの精度は、式の TIMESTAMP オペランドの精度または割り当てでの TIMESTAMP のターゲットの精度によって決定されます。 キャストのタイム・スタンプの精度を超えるストリング内の桁は切り捨てられるか、またはキャストのタイム・スタンプの精度に合わせるために不足している桁はゼロであると見なされます。 例えば、1991-3-2-8.30.00 は 1991-03-02-08.30.00.000000000000 に等しくなります。
タイム・スタンプのストリング表記は、この値を指定した精度でタイム・スタンプに明示的にキャストすることによって、異なるタイム・スタンプの精度を指定することができます。ストリングが定数の場合、代替手段はストリング定数の前に TIMESTAMP キーワードを付けることです。例えば、TIMESTAMP '2007-03-28 14:50:35.123' は TIMESTAMP(3) のデータ・タイプになります。
また SQL ステートメントは、 タイム・スタンプの ODBC ストリング表示を入力値としてのみサポートします。 タイム・スタンプの ODBC ストリング表示の形式は、yyyy-mm-dd hh:mm:ss.nnnnnnnnnnnn です (小数秒の桁数は 0 から 12 までの範囲の値を指定可能)。