8.4.12 TRUNC
指定された桁数より下の数値を切り捨てた値を返します。
日時データを切り捨てるスカラ関数TRUNCについては,「8.9.10 TRUNC」を参照してください。
- 〈この項の構成〉
(1) 指定形式
スカラ関数TRUNC::=TRUNC(対象データ〔,桁数〕) 対象データ::=値式 桁数::=値式
(2) 指定形式の説明
- 対象データ:
-
処理対象の数データを指定します。
指定規則を次に示します。
-
対象データは,値式の形式で指定します。値式については,「7.21 値式」を参照してください。
-
対象データには,数データを指定してください。数データについては,「6.2.1 データ型の種類」の「(1) 数データ」を参照してください。
-
対象データには,?パラメタを単独で指定できません。
-
- 桁数:
-
桁数を指定します。
指定規則を次に示します。
-
桁数は,値式の形式で指定します。値式については,「7.21 値式」を参照してください。
-
桁数には,INTEGER型,BIGINT型,またはSMALLINT型のデータを指定してください。
桁数の指定値が正(n)の場合は,対象データの小数点第n位を残して,小数点n+1位以下が切り捨てられます。桁数の指定値が負(-n)の場合は,対象データの整数部n桁以下が切り捨てられます。
桁数を省略した場合,0が仮定されて小数点以下の値が切り捨てられます。
-
スカラ関数TRUNCの実行結果の例を次に示します。
- (例)
-
数データ123.456の小数点第2位までを残し,第3位以下を切り捨てます。
TRUNC(123.456,2) → 123.450
(3) 規則
-
桁数に?パラメタを指定した場合,?パラメタに仮定されるデータ型はINTEGER型になります。
-
実行結果のデータ型と長さは,引数に指定した数データのデータ型と長さになります。
-
実行結果の値は,非ナル値制約なし(ナル値を許す)となります。
-
対象データまたは桁数がナル値の場合,実行結果はナル値になります。
-
DOUBLE PRECISION型またはFLOAT型のデータは誤差を含むため,スカラ関数TRUNCで使用する場合は注意が必要です。例えば,次のようなケースでは,計算結果が期待した結果になりません。
TRUNC(2.172157E4,2) → 2.1721560000000001E4
これは,2進法では0.01を有限桁で表現できないため,0.01と1.0E-02が正確には等しくないことが原因となっています。切り捨ての結果として正確な値が必要な場合は,対象データにはDECIMAL型またはNUMERIC型のデータを使用してください。
-
引数に指定できるデータ型と桁数の有効範囲を次の表に示します。
項番 |
引数(数データ)に指定できるデータ型 |
桁数の有効範囲 |
---|---|---|
1 |
INTEGER |
-18〜0 |
2 |
BIGINT |
|
3 |
SMALLINT |
-9〜0 |
4 |
DECIMAL(m,n) |
-(m-n-1)〜n |
5 |
NUMERIC(m,n) |
|
6 |
DOUBLE PRECISION |
-308〜323 |
7 |
FLOAT |
(凡例)m,n:正の整数
- 注
-
桁数の指定値が有効範囲外であっても,エラーとなりません。正の値で有効範囲外のときは,切り捨ては発生しません。負の値で有効範囲外のときは,結果は0となります。
桁数の指定値と変換結果の例を次に示します。
- 例1
-
C1列のデータ型がINTEGER型,値が123456789の表T1に対して,次のSQL文を実行します。
SELECT TRUNC("C1",x) FROM "T1"
このときのTRUNC("C1",x)の結果を次の表に示します。
表8‒9 xの値とSQL文の実行結果 xの値
TRUNC(C1,x)の結果
1以上
123456789
0
123456789
-1
123456780
-8
100000000
-9以下
0
- 例2
-
C2列のデータ型がDECIMAL(5,2),値が123.45の表T1に対して,次のSQL文を実行します。
SELECT TRUNC("C2",y) FROM "T1"
このときのTRUNC("C2",y)の結果を次の表に示します。
表8‒10 yの値とSQL文の実行結果 yの値
TRUNC(C2,y)の結果
3以上
123.45
2
123.45
1
123.40
0
123.00
-1
120.00
-2
100.00
-3以下
0.00
(4) 例題
- 例題1
-
表T1のC2列およびC3列のデータの小数点第2位までを残して,小数点第3位以下を切り捨てます。
SELECT TRUNC("C2",2),TRUNC("C3",2) FROM "T1"
- 例題2
-
表T1のC1列〜C3列のデータの整数部2桁以下を切り捨てます。
SELECT TRUNC("C1",-2),TRUNC("C2",-2),TRUNC("C3",-2) FROM "T1"