以下查询的结果让我很恼火:
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.'
第一个选择的返回值显然是十进制(11,0)类型。此处记录了合并函数的类型统一(请参阅数字操作数)。遵循这些说明并向后解析小数(11,0)意味着文字1 被解释为一个大整数。
第二个选择的返回类型是小数(7,0)。可以在此处阅读 DB2 在乘法上的行为方式(结果的精度是两个操作数的精度之和)。在这种情况下,这意味着文字1 被解释为一个小整数。
请注意,该char(..)
函数仅用于显示返回值的精度和小数位数。
当有一个整数文字时(如1
上面的示例),我如何知道 DB2 如何解释它(smallint、largeint、bigint)?
我正在使用 DB2 for z/OS v11。