数字文字的整数或小写

时间:2016-06-27 10:47:55

标签: sql db2 type-conversion implicit-cast db2-zos

以下查询的结果让我感到恼火:

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)。 coalesce函数的类型统一记录为here(参见数字操作数)。遵循这些说明并向后解析小数(11,0)意味着文字 1被解释为大整数

第二个选择的返回类型是小数(7,0)。 DB2的乘法行为如何读取here(结果的精度是两个操作数的精度之和)。在这种情况下,这意味着文字 1被解释为一个小整数

请注意,char(..)函数仅用于显示返回值的精度和比例。

当有一个整数文字(如上例中的1)时,我怎么知道DB2如何解释它(smallint,largeint,bigint)?

我正在使用DB2 for z / OS v11。

1 个答案:

答案 0 :(得分:2)

所有适合大整数的数字常量都被解释为 - 除非它们不是,谢谢IBM;)。

在第二种情况下,您必须查看文字出现的上下文,即在算术表达式中。该行为在SQLReference的"Arithmetic with an integer and a decimal operand"部分中明确描述:

  

已转换为十进制数的整数的临时副本具有精度p和小数位数0.对于大整数,p为19,对于大整数,p为11,对于小整数,p为5。在整数常量的情况下,p取决于整数常量中的位数。对于由5位或更少数字组成的整数常数,p为5。否则,p与整数常量中的位数相同。

因此常量的处理不同于各种“内置”二进制数据类型。常量值(虽然定义为二进制)被视为十进制常量。