数字文字的整数或smallint



以下查询的结果激怒了我:

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)。此处记录了Colesce函数的类型统一(请参阅数字操作数)。按照以下说明并将小数(11,0)向后解决,这意味着文字 1被解释为大整数

第二选择的返回类型是十进制(7,0)。可以在此处阅读DB2在乘法上的表现(结果的精度是两个操作数的精度之和)。在这种情况下,这意味着文字 1被解释为一个小整数

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

具有整数字面形式(例如上面的示例中的1),我如何知道DB2如何解释它(SmallInt,glotint,bigint)?

我正在为Z/OS V11使用DB2。

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

在您的第二种情况下,您必须看到字面出现的上下文,即在算术表达式内。该行为在"用整数和十进制操作数"部分中明确描述:

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

因此,对常数的处理与各种"内置"二进制数据类型不同。恒定值(尽管按定义为二进制)更像是十进制常数。

相关内容

  • 没有找到相关文章

最新更新