日付/時刻の値
日時データ・タイプは、DATE、TIME、および TIMESTAMP です。 日時値は、特定の算術演算とストリング演算で使用することができますし、特定のストリングと互換性がありますが、ストリングでも数値でもありません。
日付
- 月の部分の範囲は 1 から 12 です。
- 日の部分の範囲は 1 から x までです。ここで、x は 28、29、30、または 31 であり、月によって異なります。
- 年の部分の範囲は、ローカル表では 0001 から 9999 までです。
日付の内部表示は 4 バイトのストリングです。 各バイトは、2 桁のパック 10 進数からなります。 最初の 2 バイトは年、3 番目のバイトは月、最後のバイトは日です。
DATE 列の長さは、SQLDA の項で説明するように、10 バイトです。 これは、日付の値を文字ストリングで表記するために適した長さになっています。
Time
- 時の部分の範囲は 0 から 24 までです。
- 分と秒の範囲は 0 から 59 までです。
時刻の内部表示は 3 バイトのストリングです。 各バイトは、2 桁のパック 10 進数からなります。 最初のバイトは時、2 番目のバイトは分、最後のバイトは秒です。
TIME 列の長さは、SQLDA の項で説明するように、8 バイトです。 これは、時刻の値を文字ストリングで表記するために適した長さになっています。
タイム・スタンプ
タイム・スタンプの内部表示は、7 から 13 バイトのストリングです。各バイトは、2 桁のパック 10 進数からなります。 最初の 4 バイトは日付、次の 3 バイトは時刻、最後の 0 から 6 バイトは秒の小数点部分です。
SQLDA に記述されている TIMESTAMP 列の長さは 19 から 32 バイトです。 これは、値の文字ストリング表示に適した長さです。
日付/時刻の値のストリング表記
データ・タイプが DATE、TIME、または TIMESTAMP の値は、 ユーザーが意識することのない内部形式で表されます。 ただし、日付、時刻、およびタイム・スタンプの値は、 ストリングで表すこともできます。 データ・タイプが DATE、TIME、または TIMESTAMP である定数や変数がないため、 この表示方法は便利です。 日付/時刻の値を取り出すには、 この値をストリング変数に割り当てる必要があります。 CHAR または GRAPHIC 関数 (Unicode データベース用のみ) を使用すると、 日付/時刻値をストリング表記に変更することができます。 通常、ストリング表記は、プログラムがプリコンパイルされるときか、 またはデータベースにバインドされるときに、 DATETIME オプションの指定によってオーバーライドされるのでない限り、 アプリケーションのテリトリー・コードに関連する日付/時刻の値のデフォルトの形式になります。
ラージ・オブジェクト・ストリングは、その長さに関係なく、日付/時刻値のストリング表記として使用することはできません (SQLSTATE 42884)。
日付/時刻の値の有効なストリング表記が内部の日付/時刻の値の操作に使用される場合、 ストリング表記が日付、時刻、またはタイム・スタンプの値の内部形式に変換されてから、 操作が実行されます。
日付、時刻、およびタイム・スタンプのストリングでは、 文字と数字しか使用することができません。
日付ストリング
| フォーマット名 | 省略形 | 日付フォーマット | 例 |
|---|---|---|---|
| 国際標準化機構 (区切り記号付き) | ISO | yyyy-MM-dd | '2018-10-27' |
| 国際標準化機構 (区切り文字なし)1 | - | yyyyMMdd | '20181027' |
| IBM® USA 標準規格 | USA | MM/dd/yyyy | '10/27/2018' |
| IBM 欧州標準規格 | EUR | dd.MM.yyyy | '27.10.2018' |
| 日本工業規格西暦 | JIS | yyyy-MM-dd | '2018-10-27' |
| Netezza1 | - | dd-MON-yy | '12-FEB-16' |
| 地域別定義 | LOC | アプリケーションのテリトリー・コードに依存します。 | - |
| 1 このフォーマットは、入力値にのみ使用可能で、出力値や定数には使用できません。 | |||
- 末尾のブランクを付けることができます。
- 月と日の部分の先行ゼロは省略可能です。
時刻ストリング
| フォーマット名 | 省略形 | 時刻フォーマット | 例 |
|---|---|---|---|
| 国際標準化機構 | ISO | hh.mm または hh.mm.ss | '13.30.05' |
| IBM USA 標準規格 | USA | hh または hh:mm AM または PM | '1:30 PM' |
| IBM 欧州標準規格 | EUR | hh.mm または hh.mm.ss | '13.30.05' |
| 日本工業規格西暦 | JIS | hh:mm または hh:mm:ss | '13:30:05' |
| 地域別定義 | LOC | アプリケーションのテリトリー・コードに依存します。 | - |
- 末尾のブランクを付けることができます。
- 時間の先行ゼロは省略可能です。
- 秒は省略可能です。この場合、0 秒の暗黙指定が想定されます (例えば、13:30 は 13:30:00 に相当します)。
- 国際標準化機構は、時刻フォーマットを日本工業規格 (西暦) フォーマットと同じフォーマットに変更しました。 このため、アプリケーションで現行の国際標準化機構フォーマットが必要な場合は、 JIS を使用してください。
- USA 形式では、以下の決まりがあります。
- 分は省略可能です。この場合、00 分の暗黙指定が想定されます (例えば、1 PM は 1:00 PM に相当します)。
- 時は 12 を超えてはなりません。また、00:00 AM という特別な場合を除き、0 にすることもできません。
- 「AM」および「PM」の前にはスペースが 1 つあります。
- 「AM」および「PM」は、小文字または大文字のどちらで表してもかまいません。
- 次の表は、USA 形式が JIS 形式にどのように対応するかを示しています。
USA 形式 JIS 形式 12:01 AM から 12:59 AM 00:01:00 から 00:59:00 01:00 AM から 11:59 AM 01:00:00 から 11:59:00 12:00 PM (正午) から 11:59 PM 12:00:00 から 23:59:00 12:00 AM (深夜 12 時) 24:00:00 00:00 AM (深夜 12 時) 00:00:00
タイム・スタンプ・ストリング
| フォーマット名 | タイム・スタンプ形式 | 例 |
|---|---|---|
| 内部 (1 秒単位) | yyyy-MM-dd-hh.mm.ss | '2018-03-22-12.00.00' |
| 内部 (小数秒) | yyyy-MM-dd-hh.mm.ss.SSSSSSSSSSSS | '2018-03-22-12.00.00.000000000005' |
| ODBC (1 秒単位)1 | yyyy-MM-dd hh:mm:ss | '2018-03-22 08:30:58' |
| ODBC (小数秒)1 | yyyy-MM-dd hh:mm:ss.SSSSSSSSSSSS | '2018-03-22 08:30:58.000000000005' |
| Netezza1 | yyyyMMdd hh:mm:ss AM または PM | '20180101 12:00:59 PM' |
| 区切り文字なし | yyyyMMddhhmmss | '20180322120000' |
| 区切り文字なし (小数秒) | yyyyMMddhhmmssSSSSSSSSSSSS | '20180322120000123456123456' |
| 1 このフォーマットは、入力値にのみ使用可能で、出力値や定数には使用できません。 ここでは、タイム・スタンプの日時の部分はブランクで区切って示されています。ハイフンか T の文字で区切ることもできます。例えば、「2018-03-22 08:30:58.7」、「2018-03-22-08:30:58.7」、「2018-03-22T08:30:58.7」は同等です。 | ||
- 秒は、小数点以下 12 桁まで指定できます。
- 小数秒の末尾ゼロは、切り捨てることもできますし、すべて省略することもできます。
- タイム・スタンプの月、日、および時の部分の先行ゼロは省略可能です。
- 文字ストリングに任意の数の末尾ブランクを含めることができます。
- タイム・スタンプのストリング表記が TIMESTAMP データ・タイプの値に暗黙的にキャストされると、キャストの結果の精度は、式の TIMESTAMP オペランドの精度、または割り当てにおける TIMESTAMP ターゲットの精度によって決定されます。
- キャストの精度を超える小数秒の桁数は、ストリングから切り捨てられます。 例えば、ストリング「2018-3-2-8.30.00297」が TIMESTAMP(3) にキャストされる場合、結果は 2018-03-02-08.30.00.002 になります。
- キャストの精度がストリングの精度を超えた場合、結果はゼロで埋められます。 例えば、ストリング「2018-3-2-8.30.07」が TIMESTAMP(12) にキャストされる場合、結果は 2018-03-02-08.30.00.070000000000 になります。
- タイム・スタンプのストリング表記は、この値を指定した精度でタイム・スタンプに明示的にキャストすることによって、異なるタイム・スタンプの精度を指定することができます。ストリングが定数の場合、代替手段はストリング定数の前に TIMESTAMP キーワードを付けることです。例えば、TIMESTAMP「2018-03-28 14:50:35.123」のデータ・タイプは TIMESTAMP(3) になります。