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