次のクエリの結果は私を苛立たせます:
select
char(coalesce(1, cast(5 as decimal(2,0)))) as a,
char(1 * cast(5 as decimal(2, 0))) as b
from sysibm.sysdummy1;
a = ' 00000000001.'
b = ' 0000005.'
最初の選択の戻り値は、明らかに型 decimal(11,0) です。合体関数の型の統一については、こちらに記載されています(数値オペランドを参照)。これらの指示に従い、decimal(11,0) を逆方向に解決すると、リテラル1 は大きな整数として解釈されます。
2 番目の選択の戻り値の型は decimal(7,0) です。乗算に対する DB2 の動作については、こちらを参照してください(結果の精度は、両方のオペランドの精度の合計です)。この場合、これはリテラル1 が small integer として解釈されることを意味します。
このchar(..)
関数は、戻り値の精度と位取りを示すためにのみ適用されていることに注意してください。
(上記の例のように) 整数リテラルがある場合1
、DB2 がそれをどのように解釈するか (smallint、largeint、bigint) を知るにはどうすればよいですか?
DB2 for z/OS v11 を使用しています。