値のデータタイプを変換するための関数。
SELECT CAST('123.456' AS DOUBLE)
FROM SYSIBM.SYSDUMMY1; -- DB2におけるダミーテーブル。今回はテーブルは何でもいいので、このように指定しておく。
DB2において、DOUBLEとFLOAT、DECIMALとNUMERICはそれぞれ同じ意味を示す。
DOUBLEで小数点の計算を行う場合、正確な数値にならないことがある。
一方、DECIMALで小数点の計算を行う場合、DOUBLEに比べてパフォーマンスが劣る場合がある。
数字を10進数で持つ。お金の計算などに用いる。
数字を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進数になる。