IBM® Informix® 12.10

TRUNC 関数

TRUNC 関数は、切り捨てられた値を戻すことによって、最初の数値、日付 (DATE) 型引数、または日時 (DATETIME) 型引数の精度を低くすることができます。最初の引数が数値でも時刻でもない場合は、数値、日付 (DATE) 型、または日時 (DATETIME) 型に型変換する必要があります。

TRUNC 関数は、切り捨てられた値を戻すことによって、最初の数値、日付 (DATE) 型引数、または日時 (DATETIME) 型引数の精度を低くすることができます。最初の引数が数値でも時刻でもない場合は、数値、日付 (DATE) 型、または日時 (DATETIME) 型に型変換する必要があります。

TRUNC 関数は、ROUND 関数に似ていますが、2 番目の引数で指定される精度内の最下位桁または時間単位より小さい最初の引数の一部を (最も近い整数に丸めるのではなく) 切り捨てます。
  • 数値式の場合は、TRUNC 関数は、指定された精度より低い数字をゼロで置き換えます。
  • 日付 (DATE) 型または日時 (DATETIME) 型式の場合は、TRUNC は、フォーマット指定より小さい時間単位を、時間単位が month または day の場合は 1 で置き換え、時間単位が day より小さい場合は 0 で置き換えます。
TRUNC 関数は、戻り値の精度を指定するオプションの 2 番目の引数を受け入れることができます。
  • 最初の引数が数値式であるときには、2 番目の引数は -32 から +32 までの範囲内の整数である必要があり、 戻り値の最下位桁の位置 (小数点に相対的な位置) を指定します。 最初の引数が数値であるときに、ファクタ 指定を行わない場合は、TRUNC によって、小数点以下桁数ゼロまたは 1 の位で切り捨てられた最初の引数の値が戻されます。
    図 1 で示すように、正の桁値を指定すると値は小数点以下に切り捨てられ、 負の桁値を指定すると値は整数に切り捨てられます。
    図 1. 負、ゼロ、および正の切捨てファクタの例
    図の説明の開始 - この図は周囲の本文で説明されています。- 図の説明の終了
    次の例では、SELECT 文内で数値を戻す列式と共に TRUNC 関数を呼び出しています。この文は、注文番号および切り捨てられた合計価格 (デフォルトの小数点以下桁数ゼロに切り捨てられた) が $124.00 である品目を表示します。
    SELECT order_num , TRUNC(total_price) FROM items
       WHERE TRUNC(total_price) = 124.00;
    金額 (MONEY) 型が、小数点以下桁数ゼロを指定する TRUNC 関数の呼び出しの中の引数である場合、戻り値の小数部は .00 になります。例えば、次の SELECT 文では、125.46 と金額 (MONEY) 型列値が切り捨てられます。これは、125 と、items 表の行ごとに切り捨てられた価格を xxx.00 という形式で戻します。
    SELECT TRUNC(125.46), TRUNC(total_price) FROM items;
  • TRUNC の最初の引数が日時 (DATETIME) 型式であるときには、2 番目の引数は、戻り値の最小有効時間単位を指定する引用符付き文字列である必要があります。2 番目の引数としては、次のフォーマット文字列のみが有効です。
    表 1. TRUNC 関数に対する日時 (DATETIME) 型引数のフォーマット文字列
    フォーマット文字列 戻り値に対する効果
    'YEAR' 年初に切り捨てられます。monthdayhour、および minute の値は 01-01 00:00 に切り捨てられます。
    'MONTH' 月の最初の日の初めに切り捨てられます。hour および minute の値は 00:00 に丸められます。
    'DD' 同じ日の初め (00:00 = 午前 0 時) に切り捨てられます。
    'DAY' 最初の引数が日曜日である場合は、その日付の午前 0 時 (00:00) が戻されます。他の曜日の場合は、前の日曜日の午前 0 時が戻されます。
    'HH' 時間の初めに切り捨てられます。minute の値はゼロに切り捨てられます。
    'MI' 最も近い分の初めに切り捨てられます。これらのすべてのフォーマット文字列について、minute より小さい時間単位が廃棄されます。

    最初の日時 (DATETIME) 型式の引数の後にフォーマット文字列を指定しないと、フォーマット文字列として 'DD' を指定した場合と同様に、戻り値が、その日に切り捨てられた最初の引数の値になります。

    次の例では、SELECT 文内で、DATETIME YEAR TO FRACTION(5) 値を戻す列式と共に、TRUNC 関数を呼び出しています。これらの例では、表 mytab に行が 1 つのみあり、その行の mytab.col_dt の値は 2006-12-07 14:30:12.12300 です。

    次の問合せでは、日時 (DATETIME) 型フォーマット文字列として 'YEAR' を指定しています。
    SELECT TRUNC(col_dt, 'YEAR') FROM mytab;
    戻される値は 2006-01-01 00:00 です。
    次の問合せは前の問合せに似ていますが、切り捨てられた値を日付 (DATE) 型にキャストします。
    SELECT TRUNC(col_dt, 'YEAR')::DATE FROM mytab;
    戻される値は 01/01/2006 です。
    次の例では、日時 (DATETIME) 型フォーマット文字列として 'MONTH' を指定しています。
    SELECT TRUNC(col_dt, 'MONTH') FROM mytab;
    戻される値は 2006-12-01 00:00 です。
    次の例では、日時 (DATETIME) 型式を YEAR TO HOUR 精度に切り捨てます。
    SELECT TRUNC(col_dt, 'HH') FROM mytab;
    戻される値は 2006-12-07 14:00 です。
  • 最初の引数が日付 (DATE) 型式であるときには、2 番目の引数は通常、戻り値の最小時間単位を指定する引用符付き文字列です。これらは、日時 (DATETIME) 型値の切捨ての場合と同じフォーマット文字列ですが、日付に 'HH' および 'MI' が無効である点、および日付 (DATE) 型引数の切捨てに、デフォルト フォーマット文字列がない点が異なります。

    フォーマットされた日付 (DATE) 型値を戻すには、TRUNC 関数の 2 番目の引数として、次のいずれかの引用符付き文字列を使用する必要があります。

    表 2. TRUNC 関数に対する日付 (DATE) 型引数のフォーマット文字列
    フォーマット文字列 戻り値に対する効果
    'YEAR' 年初に切り捨てられます。monthday の値はそれぞれ、01 になります。
    'MONTH' 月の初めに切り捨てられます。day の値は 01 になります。
    'DD' 最初の date_expression 引数の日付 (DATE) 型値が戻されます。
    'DAY' 最初の引数が日曜日である場合は、日付が戻されます。他の曜日の場合は、前の日曜日の日付が戻されます。

最初の引数が日付 (DATE) 型であるときに、2 番目の引数としてフォーマット文字列を指定しない場合は、フォーマット文字列がデフォルトとして有効になりません。エラーは出されませんが、最初の引数は、日付 (DATE) 型値ではなく整数に評価される数値式として扱われます。Informix® は、1899 年 12 月 31 日以降の日数の整数カウントとして内部で日付 (DATE) 型値を格納します。

例えば、問合せ SELECT ROUND(TODAY) FROM systables は、日付 (DATE) 型式のフォーマット文字列を提供せず、問合せが 2008 年 4 月 1 日に発行されると、整数 39538 を戻します。

2 番目の引数として数値フォーマット指定を適用すると、非負数は日付 (DATE) 型値に影響しませんが、次の例では戻り値の最後の 2 桁がゼロに丸められます。
SELECT TRUNC(TODAY, -2) FROM systables;
39500 のような整数日付が役に立たないアプリケーションでは、TRUNC 関数の 2 番目の引数として、'YEAR''MONTH''DAY'、または 'DD' フォーマット文字列を使用して、日付 (DATE) 型式が数値式である場合と同様に処理されるのを防ぐことができます。MDY4/DBDATE 環境変数に設定されている場合、2008 年 4 月 1 日には、次の問合せによって、日付 (DATE) 型値 04/01/2008 が戻されます。
SELECT TRUNC(TODAY, 'DD') FROM systables;
ホスト変数を使用して、動的 SQL に切捨てられた時刻指定値を格納する場合、最初の引数のデータ型が作成時に不明であるときには、Informix は、日時 (DATETIME) 型が TRUNC 関数の最初の引数であると見なし、DATETIME YEAR TO MINUTE 型の切捨て値を戻します。文が作成された後、実行時に、ホスト変数に日付 (DATE) 型値が提供されると、エラー -9750 が出されます。このようなエラーを防ぐため、ホスト変数のデータ型は、次の部分プログラム フラグメントのように、キャストを使用して指定できます。
sprintf(query2, "%s", 
   "select trunc( ?::date, 'DAY') from mytab");
EXEC SQL prepare selectq from :query2;
EXEC SQL declare select_cursor cursor for selectq;
EXEC SQL open select_cursor using :hostvar_date_input;

EXEC SQL fetch select_cursor into :var_date_output;

組込み時刻データ型の表示およびデータ入力フォーマットを指定できる各 Informix 環境変数の優先順位について詳しくは、日付 (DATE) 型フォーマットおよび日時 (DATETIME) 型フォーマットの指定の優先順位のトピックを参照してください。

TRUNC 関数名は、SQL の TRUNCATE 文の意味とは異なり、「truncate」という英単語の使用法に基づいています。TRUNC 関数は、最初の引数の値を、精度が同じまたはそれ以下である別の値で置き換えます。TRUNCATE 文は、表のスキーマを廃棄せずに、データベース表からすべての行を削除します。


フィードバックの送信 | 例の共有 | トラブルシューティング

PDF を見つけるには、Publications for the IBM Informix 12.10 family of products を参照してください。
リリース ノート、ドキュメント ノート、マシン ノートについては、リリース ノート・ページを参照してください。
タイムスタンプ リリース日: 2013 年 3 月