以下查询的结果使我感到恼火:
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。
发布于 2016-06-28 07:09:14
所有适合于大整数的数值常量都被解释为大整数--除非它们不是,谢谢IBM ;)。
在第二种情况下,您必须看到文字出现的上下文,即在算术表达式中。这种行为在“带整数和十进制操作数的算术”的SQLReference一节中有明确的描述:
转换为十进制数的整数的临时副本具有精度p和小数位数0。P对于一个大整数是19,对于一个大整数是11,对于一个小整数是5。在整数常数的情况下,p取决于整数常量中的数字数。对于包含5位数或更少数的整数常量,P为5。否则,p与整数常量中的数字数相同。
因此,对常量的处理不同于所有类型的“内置”二进制数据类型。常量值(尽管定义为二进制)更像是十进制常量。
https://stackoverflow.com/questions/38052003
复制相似问题