🐕

INTEGERにCASTすると四捨五入で返る

2022/10/23に公開

背景

小数点以下を切り捨てたい場合、例えばpythonだとint()を使う。

[IN]
int(3.4)
int(3.6)
[OUT]
3
3

先日SQLを叩く際、小数点以下切り捨ての結果を得るために特に調べもせずpythonと同じ感覚でINTEGERにCASTするという処理を書いてたら、後々計算が合わないという事象が発生した。

SELECT
CAST(3.4 AS INT)
CAST(3.6 AS INT)

原因

INTEGERにCASTすると四捨五入で結果が返ることが原因

SELECT
CAST(3.4 AS INT)
CAST(3.6 AS INT)
3
4

対策

TRUNCしましょう

SELECT
TRUNC(3.4)
TRUNC(3.6)
3
3

以上です。

Discussion