間隔リテラルは、一定の期間を指定するために使用されます。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位を超えています。 |
1つの 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位まで四捨五入しています。 |
1つのINTERVAL DAY TO SECONDリテラルに別のINTERVAL DAY TO SECONDリテラルを加算または減算できます。例:INTERVAL'20' DAY - INTERVAL'239' HOUR = INTERVAL'10-1' DAY TO SECOND。