首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数字文字的整数或Smallint

数字文字的整数或Smallint
EN

Stack Overflow用户
提问于 2016-06-27 10:47:54
回答 1查看 570关注 0票数 0

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

代码语言:javascript
复制
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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-28 07:09:14

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

在第二种情况下,您必须看到文字出现的上下文,即在算术表达式中。这种行为在“带整数和十进制操作数的算术”的SQLReference一节中有明确的描述:

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

因此,对常量的处理不同于所有类型的“内置”二进制数据类型。常量值(尽管定义为二进制)更像是十进制常量。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38052003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档