TRUNCATE または TRUNC スカラー関数

TRUNCATE 関数は、数値または日時値の切り捨てた値を返します。

TRUNCATE numeric

構文図を読む構文図をスキップする TRUNCATETRUNC (numeric-expression1 ,0,numeric-expression2 )

TRUNCATE datetime

構文図を読む構文図をスキップする TRUNCATETRUNC (datetime-expression ,'DD',format-stringlocale-name )

スキーマは SYSIBM です。TRUNCATE 数字関数の SYSFUN バージョンは引き続き使用可能です。

戻り値のデータ・タイプは、最初の引数によって異なります。
  • 最初の引数の結果が数値の場合、小数点の右側または左側の指定された桁数まで切り捨てた数値が返されます。
  • 最初の引数が DATE、TIME、または TIMESTAMP の場合、format-string で指定された単位に切り捨てられた日時値が戻されます。
TRUNCATE numeric
numeric-expression1 が数値データ・タイプの場合、numeric-expression2 が正であるなら、TRUNCATE 関数は小数点の右側 numeric-expression2 桁までに切り捨てられた numeric-expression1 を戻します。numeric-expression2 がゼロまたは負の場合は、小数点の左側の桁までの切り捨て結果を戻します。numeric-expression2 が指定されない場合、numeric-expression1 の小数点の左側の桁が切り捨てられます。
numeric-expression1
組み込み CHAR、VARCHAR、GRAPHIC、VARGRAPHIC、または数値データ・タイプである値を戻す必要のある式。値が数値データ・タイプでない場合、その値は関数を評価する前に 暗黙的に DECFLOAT(34) にキャストされます。

式が 10 進浮動小数点データ・タイプの場合、DECFLOAT の丸めモードは使用されません。TRUNCATE の丸めの動作は、ROUND_DOWN の値に対応します。別の丸めの動作が必要な場合は、QUANTIZE 関数を使用してください。

numeric-expression2
組み込み数値データ・タイプの値を戻す式。 値がタイプ INTEGER でない場合、その値は関数を評価する前に暗黙的に INTEGER にキャストされます。

numeric-expression2 が負でない場合、numeric-expression1 は小数点の右側の numeric-expression2 の絶対値の桁数までで切り捨てられます。

numeric-expression2 が負の場合、numeric-expression1 は小数点の左側 (numeric-expression2 の絶対値 + 1) 桁までで切り捨てられます。負の numeric-expression2 の絶対値が小数点の左側の桁数より大きい場合、結果は 0 になります。例を以下に示します。
   TRUNCATE(748.58,-4) = 0

結果のデータ・タイプ、長さ、および位取りの属性は、最初の引数のデータ・タイプ、長さ、および位取りの属性と同じです。

引数のいずれかが NULL になる可能性がある場合、結果も NULL になる可能性があります。引数が NULL の場合、結果は NULL 値になります。

TRUNCATE datetime
datetime-expression が日時データ・タイプの場合、TRUNCATE 関数は format-string によって指定された単位に丸められた datetime-expression を戻します。 format-string が指定されていない場合、あたかも format-string に「DD」が指定されているかのように、datetime-expression は最も近い日付に切り捨てられます。
datetime-expression
DATE、TIME、または TIMESTAMP の値を戻す必要がある式。これらのデータ・タイプのストリング表記はサポートされていないため、この関数で使用するには、DATE 値、TIME 値、または TIMESTAMP 値に明示的にキャストする必要があります。あるいは、日付またはタイム・スタンプのストリング表記に TRUNC_TIMESTAMP 関数を使用することもできます。
format-string
実際の長さが 255 バイト以下の組み込み文字 ストリング・データ・タイプを返す式。format-string のフォーマット・エレメントは、datetime-expression がどのように切り捨てられるかを指定します。例えば、format-string が「DD」の場合、datetime-expression によって表されるタイム・スタンプは最も近い日付に切り捨てられます。前後のブランクはストリングから除去されます。また、結果のサブストリングは、datetime-expression のタイプに有効なフォーマット・エレメントでなければなりません (SQLSTATE 22007)。デフォルトは「DD」です。これは datetime-expression のデータ・タイプが TIME の場合には使用できません。

format-string の許容値が、ROUND 関数の説明の中のフォーマット・エレメントの表にリストされています。

locale-name
フォーマット・エレメントの値として DAY、DY、または D を使用する場合に週の最初の日を決定するために使用される、ロケールを指定する文字定数です。locale-name の値には大/小文字の区別がなく、有効なロケールでなければなりません (SQLSTATE 42815)。有効なロケールとその命名については、『SQL および XQuery のロケール名』を参照してください。locale-name が指定されないと、 特殊レジスター CURRENT LOCALE LC_TIME の値が使用されます。
関数の結果は、datetime-expression と同じ日付タイプです。 結果は NULL 値になることがあります。 いずれかの引数が NULL 値である場合、結果は NULL 値になります。

結果のデータ・タイプおよび長さ属性は、最初の引数のデータ・タイプおよび 長さ属性と同じになります。

引数が NULL になる可能性があるか、または引数が 10 進浮動小数点数ではなく、データベース構成パラメーターで dft_sqlmathwarn が YES に設定されている場合には、 結果は NULL になる可能性があります。 引数が NULL の場合、結果は NULL 値になります。

  • 決定論: TRUNCATE は決定論的な関数です。ただし、以下の関数の呼び出しは、特殊レジスターの CURRENT LOCALE LC_TIME の値によって決まります。
    • locale-name が明示的に指定されず、以下のいずれかが真の場合、日時値の切り捨て。
      • format-string が定数でない
      • format-string が定数で、ロケールに依存するフォーマット・エレメントが含まれる
      特殊レジスターを使用できないところでは、特殊レジスターの値に依存する関数の呼び出しを使用することはできません (SQLSTATE 42621、428EC、または 429BX)。

  • 例 1: EMPLOYEE 表を使って、最高給与額の社員の平均月給を計算します。 結果の小数点より右側の 2 桁を切り捨てます。
       SELECT TRUNCATE(MAX(SALARY)/12,2)
         FROM EMPLOYEE;
    最高給与額の社員の年収が $52750.00 とすると、この例では 4395.83 が戻されます。
  • 例 2: 873.726 をそれぞれ小数点以下 2、1、0、-1、および -2 桁に切り捨てた数字が表示されます。
       VALUES (
         TRUNCATE(873.726,2),
         TRUNCATE(873.726,1),
         TRUNCATE(873.726,0),
         TRUNCATE(873.726,-1),
         TRUNCATE(873.726,-2),
         TRUNCATE(873.726,-3) );
    この例では、873.720、873.700、873.000、870.000、800.000、および 0.000 が戻されます。
  • 例 3: 873.726 を小数点以下 0 桁に切り捨てた 10 進浮動小数点数が表示されます。
       VALUES(TRUNCATE(DECFLOAT(873.726),0))
    は、値 873 を戻します。
  • 例 4: 変数 vTRNK_DT を、入力日付に最も近い月の値に丸めた日付に設定します。
       SET vTRNK_DT = TRUNC(DATE('2000-08-16'), 'MONTH');    
    設定される値は 2000-08-01 です。
  • 例 5: ホスト変数 TRNK_TMSTMP を、現在の年に最も近い年に丸めた値に設定します。
       SET :TRNK_TMSTMP = TRUNCATE('2000-03-14-17.30.00'), 'YEAR');
    設定される値は 2000-01-01-00.00.00.000000 です。