間隔リテラルは、一定の期間を指定するために使用されます。OceanBaseデータベースでは、INTERVAL YEAR TO MONTHとINTERVAL DAY TO SECONDの2種類の間隔リテラルがサポートされています。
プレディケーターとサフィックス
各区間リテラルには、プレディケーターとオプションのサフィックスが含まれます。プレディケーターは測定する日付または時間の基本単位を定義し、サフィックスは対象となる基本単位の最小増分を定義します。
例えば、DAY TO SECOND は、日から秒までの最小単位を指定する区間リテラルであり、プレディケーターは DAY、サフィックスは SECOND です。サフィックスはオプションであり、区間リテラルを指定する際に省略できます。
区間リテラルに含まれるフィールドは YEAR、MONTH、DAY、HOUR、MINUTE、SECOND です。これらの重みは YEAR から順に減少します。サフィックスを指定する必要がある場合、リテラル内のサフィックスの重みはプレディケーターよりも低くなければならず、そうでない場合は無効な指定となります。例えば、INTERVAL '1-2' DAY TO YEAR は無効なリテラルです。
プレディケーター値の桁数範囲は 0 ~ 9 で、デフォルト値は 2 です。SECOND フィールドは秒数を指定し、このフィールドは最大で小数点後 9 桁まで正確に表現でき、最小は小数点 0 桁です。デフォルトの精度は小数点後 6 桁です。フィールドの値が指定された範囲を超えた場合、データベースはエラーを返します。SECOND フィールドの小数点以下の桁数が指定された精度を超えた場合、指定された精度に合致する値に切り捨てます。
INTERVAL YEAR TO MONTH リテラル
INTERVAL YEAR TO MONTH リテラルは、年と月単位の期間を指定するために使用されます。
以下は INTERVAL YEAR TO MONTH リテラルの例です:
例 |
説明 |
|---|---|
| INTERVAL '265-2' YEAR(3) TO MONTH | 間隔は265年2ヶ月です。先頭のフィールド YEAR の精度はデフォルトの2桁より高いため、値の桁数に合った精度を指定する必要があります |
| INTERVAL '265' YEAR(3) | 間隔は265年を表します。 |
| INTERVAL '500' MONTH(3) | 間隔は500ヶ月、または41年8ヶ月を表します。 |
| INTERVAL '10' MONTH | 間隔は10ヶ月を表します。 |
| INTERVAL '123' YEAR | エラーが返されます。値123はデフォルトの精度2桁を超えています。 |
一つの INTERVAL YEAR TO MONTH リテラルに別の INTERVAL YEAR TO MONTH リテラルを加算または減算できます。例:INTERVAL '6-2' YEAR TO MONTH + INTERVAL'21' MONTH = INTERVAL '7-11' YEAR TO MONTH。
INTERVAL DAY TO SECONDリテラル
INTERVAL DAY TO SECOND リテラルは、日と具体的な時間単位で表される期間を指定するために使用されます。
次の表は、いくつかの INTERVAL DAY TO SECOND リテラルの例です。
例 |
説明 |
|---|---|
| INTERVAL '4 5:12:10.222' DAY TO SECOND(3) | 間隔は4日5時間12分10.222秒を表します。SECONDフィールドの小数点のデフォルト精度は6です。ここで精度を3に手動で指定しない場合、返される結果は0で補完されます。 |
| INTERVAL '4 5:12' DAY TO MINUTE | 間隔は4日5時間12分を表します。 |
| INTERVAL '400 5' DAY(3) TO HOUR | 間隔は400日5時間を表します。先行するフィールドDAYはデフォルトの精度2桁を超えているため、ここでは精度を3に手動で指定しています。 |
| INTERVAL '400' DAY(3) | 間隔は400日を表します。 |
| INTERVAL '11:12:10.2222222' HOUR TO SECOND(7) | 間隔は11時間12分10.2222222秒を表します。SECONDフィールドの値はデフォルトの精度6桁を超えているため、ここでは値に合致する精度を手動で指定しています。 |
| INTERVAL '11:20' HOUR TO MINUTE | 間隔は11時間20分を表します。 |
| INTERVAL '10' HOUR | 間隔は10時間を表します。 |
| INTERVAL '10:22' MINUTE TO SECOND | 間隔は10分22秒を表します。 |
| INTERVAL '10' MINUTE | 間隔は10分を表します。 |
| INTERVAL '4' DAY | 間隔は4日を表します。 |
| INTERVAL '25' HOUR | 間隔は25時間を表します。 |
| INTERVAL '40' MINUTE | 間隔40分を表します。 |
| INTERVAL '120' HOUR(3) | 間隔120時間を表します。 |
| INTERVAL '30.12345' SECOND(2,4) | 間隔30.1235秒を表します。秒の小数点以下の桁数が指定精度を超えているため、小数点以下4位まで四捨五入します。 |
一つの INTERVAL DAY TO SECOND リテラルに別の INTERVAL DAY TO SECOND リテラルを加算または減算することができます。例:INTERVAL'20' DAY - INTERVAL'239' HOUR = INTERVAL'10-1' DAY TO SECOND。