Skip to content

Latest commit

 

History

History
35 lines (28 loc) · 1.55 KB

README.md

File metadata and controls

35 lines (28 loc) · 1.55 KB

DB2

CAST関数

値のデータタイプを変換するための関数。

Double <> Decimal

SELECT CAST('123.456' AS DOUBLE)
FROM SYSIBM.SYSDUMMY1; -- DB2におけるダミーテーブル。今回はテーブルは何でもいいので、このように指定しておく。

データタイプ

DB2において、DOUBLEとFLOAT、DECIMALとNUMERICはそれぞれ同じ意味を示す。
DOUBLEで小数点の計算を行う場合、正確な数値にならないことがある。
一方、DECIMALで小数点の計算を行う場合、DOUBLEに比べてパフォーマンスが劣る場合がある。

DECIMAL/NUMERIC

数字を10進数で持つ。お金の計算などに用いる。

DOUBLE/FLOAT

数字を2進数で持つ。科学技術計算など、初めからデータに誤差が想定されるような計算で用いる。

デモ

WITH TMP AS (SELECT
DECIMAL(1000000000000000000000000000000,31,0) DEC1, --31桁が最大
DECIMAL(100000000000000000000000000000.1,31,1) DEC2, --小数点込みでも31桁が最大
DOUBLE(9999999999999999999) DBL1, -- 整数にも関わらず2進数の丸め誤差が表示されてしまう。内部的には1.0000000000000002*(10**19)で保持しているようだ。
FROM SYSIBM.SYSDUMMY1)
SELECT DEC1, DEC2, DBL1, DBL2 FROM TMP;

トリビア

パック10進数とキャラ10進数: パック10進数は計算できる数字。キャラ10進数は表示可能な10進数。
パック10進数をメインフレームなどでそのまま表示しようとすると16進数になる。