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

SELECT order_num , TRUNC(total_price) FROM items
WHERE TRUNC(total_price) = 124.00;
SELECT TRUNC(125.46), TRUNC(total_price) FROM items;
| フォーマット文字列 | 戻り値に対する効果 |
|---|---|
| 'YEAR' | 年初に切り捨てられます。month、day、hour、および 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 です。
SELECT TRUNC(col_dt, 'YEAR') FROM mytab;
戻される値は 2006-01-01 00:00 です。SELECT TRUNC(col_dt, 'YEAR')::DATE FROM mytab;
戻される値は 01/01/2006 です。SELECT TRUNC(col_dt, 'MONTH') FROM mytab;
戻される値は 2006-12-01 00:00 です。SELECT TRUNC(col_dt, 'HH') FROM mytab;
戻される値は 2006-12-07 14:00 です。フォーマットされた日付 (DATE) 型値を戻すには、TRUNC 関数の 2 番目の引数として、次のいずれかの引用符付き文字列を使用する必要があります。
| フォーマット文字列 | 戻り値に対する効果 |
|---|---|
| 'YEAR' | 年初に切り捨てられます。month と day の値はそれぞれ、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 を戻します。
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;
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 文は、表のスキーマを廃棄せずに、データベース表からすべての行を削除します。