次の方法で共有


Interval のリテラル

ODBC では、すべてのドライバーで、SQL_CHARまたは SQL_VARCHAR データ型からすべての C 間隔データ型への変換がサポートされている必要があります。 ただし、基になるデータ ソースが間隔データ型をサポートしていない場合、ドライバーはこれらの変換をサポートするために、SQL_CHAR フィールドの値の正しい形式を認識する必要があります。 同様に、ODBC では、任意の ODBC C 型をSQL_CHARまたはSQL_VARCHARに変換できる必要があるため、ドライバーは文字フィールドに格納する間隔の形式を把握する必要があります。 このセクションでは、間隔リテラルの構文について説明します。ドライバー ライターは、C 間隔データ型への変換中または C 間隔データ型からの変換時にSQL_CHARフィールドを検証するために使用する必要があります。

Note

間隔リテラルの完全な BNF 構文は、「付録 C: SQL 文法」の「間隔リテラル構文」セクションに示されています。

SQL ステートメントの一部として間隔リテラルを渡すには、間隔リテラルに対してエスケープ句構文を定義します。 詳細については、「日付、時刻、およびタイムスタンプ リテラル」を参照してください。

間隔リテラルの形式は次のとおりです。

INTERVAL[<sign>] 'value' <interval qualifier>  

ここで、"INTERVAL" は文字リテラルが間隔であることを示します。 符号にはプラスまたはマイナスを指定できます。これは間隔文字列の外側にあり、省略可能です。

間隔修飾子は、1 つの datetime フィールドにすることも、2 つの datetime フィールド (先頭フィールド TO <の末尾フィールド>>) で<構成することもできます。

  • 間隔が 1 つのフィールドで構成されている場合、1 つのフィールドは、かっこ内の省略可能な先頭の有効桁数を伴う可能性がある 2 番目以外のフィールドにすることができます。 単一の datetime フィールドには、省略可能な先頭の有効桁数、省略可能な小数部の秒の有効桁数 (かっこ内)、またはその両方を伴う可能性がある 2 番目のフィールドを指定することもできます。 秒フィールドに対して先頭の有効桁数と秒の小数部の有効桁数の両方が存在する場合は、コンマで区切られます。 秒のフィールドに秒の小数部の有効桁数がある場合は、先頭の有効桁数も必要です。

  • 間隔が先頭と末尾のフィールドで構成されている場合、先頭のフィールドは、かっこ内の間隔の先頭フィールドの有効桁数を伴う可能性がある 2 番目以外のフィールドです。 末尾のフィールドには、2 番目以外のフィールドと、間隔の秒の小数部の有効桁数をかっこで囲む可能性がある 2 番目のフィールドを指定できます。

間隔文字列は、単一引用符で囲まれます。 年月リテラルまたは日時リテラルを指定できます。 値の文字列の形式は、次の規則によって決まります。

  • この文字列には、間隔修飾子によって暗黙的に指定されるすべてのフィールドの 10 進値が<含まれます>

  • 間隔の有効桁数に YEAR フィールドと MONTH フィールドが含まれている場合、これらのフィールドの値は負符号で区切られます。

  • 間隔の有効桁数に DAY フィールドと HOUR フィールドが含まれている場合、これらのフィールドの値はスペースで区切られます。

  • 間隔の有効桁数にフィールド HOUR と下位のフィールド (MINUTE と SECOND) が含まれている場合、これらのフィールドの値はコロンで区切られます。

  • 間隔の有効桁数に SECOND フィールドが含まれており、明示的または暗黙的な秒の有効桁数が 0 以外の場合、2 番目の小数部の最初の桁の直前の文字はピリオドになります。

  • 次を除き、長さ 2 桁を超えるフィールドはありません。

    • 先頭フィールドの値は、前の精度を表す間隔または暗黙的な間隔を指定できます。

    • SECOND フィールドの小数部は、明示的または暗黙的な秒の有効桁数を指定できます。

    • 末尾のフィールドは、グレゴリオ暦の通常の制約に従います。 (「 グレゴリオ暦の制約。

次の表に、間隔の ODBC エスケープ句に含まれる有効な間隔リテラルの例を示します。 エスケープ句の構文は次のとおりです。

Note

{INTERVAL sign interval-string interval-qualifier}

リテラルエスケープ句 指定された間隔
{INTERVAL '326' YEAR(4)} 326 年の間隔を指定します。 間隔の先頭の有効桁数は 4 です。
{INTERVAL '326' MONTH(3)} 326 か月の間隔を指定します。 間隔の先頭の有効桁数は 3 です。
{INTERVAL '3261' DAY(4)} 3261 日の間隔を指定します。 間隔の先頭の有効桁数は 4 です。
{INTERVAL '163' HOUR(3)} 163 日の間隔を指定します。 間隔の先頭の有効桁数は 3 です。
{INTERVAL '163' MINUTE(3)} 163 分の間隔を指定します。 間隔の先頭の有効桁数は 3 です。
{INTERVAL '223.16' SECOND(3,2)} 223.16 秒の間隔を指定します。 間隔の先頭の有効桁数は 3 で、秒の有効桁数は 2 です。
{INTERVAL '163-11' YEAR(3) TO MONTH} 163 年と 11 か月の間隔を指定します。 間隔の先頭の有効桁数は 3 です。
{INTERVAL '163 12' DAY(3) to HOUR} 163 日と 12 時間の間隔を指定します。 間隔の先頭の有効桁数は 3 です。
{INTERVAL '163 12:39' DAY(3) to MINUTE} 163 日、12 時間、39 分の間隔を指定します。 間隔の先頭の有効桁数は 3 です。
{INTERVAL '163 12:39:59.163' DAY(3) to SECOND(3)} 163 日、12 時間、39 分、59.163 秒の間隔を指定します。 間隔の先頭の有効桁数は 3、秒の有効桁数は 3 です。
{INTERVAL '163:39' HOUR(3) to MINUTE} 163 時間 39 分の間隔を指定します。 間隔の先頭の有効桁数は 3 です。
{INTERVAL '163:39:59.163' HOUR(3) to SECOND(4)} 163 時間、39 分、59.163 秒の間隔を指定します。 間隔の先頭の有効桁数は 3 で、秒の有効桁数は 4 です。
{INTERVAL '163:59.163' MINUTE(3) to SECOND(5)} 163 分と 59.163 秒の間隔を指定します。 間隔の先頭の有効桁数は 3 で、秒の有効桁数は 5 です。
{INTERVAL -'16 23:39:56.23' DAY TO SECOND} マイナス 16 日、23 時間、39 分、56.23 秒の間隔を指定します。 暗黙的な先行精度は 2、暗黙の秒の有効桁数は 6 です。

次の表に、無効な間隔リテラルの例を示します。

リテラルエスケープ句 無効な理由
{INTERVAL '163' HOUR(2)} 間隔の先頭の有効桁数は 2 ですが、先頭フィールドの値は 163 です。
{INTERVAL '223.16' SECOND(2,2)}

{INTERVAL '223.16' SECOND(3,1)}
最初の例では、先頭の精度が小さすぎます。2 番目の例では、秒の精度が小さすぎます。
{INTERVAL '223.16' SECOND}

{INTERVAL '223' YEAR}
先頭の有効桁数は指定されていないため、既定値は 2 で、指定されたリテラルを保持するには小さすぎます。
{INTERVAL '22.1234567' SECOND} 秒の有効桁数は指定されていないため、既定値は 6 です。 リテラルには、小数点の後に 7 桁の数字があります。
{INTERVAL '163-13' YEAR(3) TO MONTH}

{INTERVAL '163 65' DAY(3) TO HOUR}

{INTERVAL '163 62:39' DAY(3) to MINUTE}

{INTERVAL '163 12:125:59.163' DAY(3) TO SECOND(3)}

{INTERVAL '163:144' HOUR(3) to MINUTE}

{INTERVAL '163:567:234.163' HOUR(3) to SECOND(4)}

{INTERVAL '163:591.163' MINUTE(3) to SECOND(5)}
末尾のフィールドはグレゴリオ暦の規則に従っていません。