为啥 BIGINT/INT 在 Netezza 中不起作用

Posted

技术标签:

【中文标题】为啥 BIGINT/INT 在 Netezza 中不起作用【英文标题】:Why does BIGINT/INT not work in Netezza为什么 BIGINT/INT 在 Netezza 中不起作用 【发布时间】:2016-07-07 22:36:11 【问题描述】:

在 Netezza 中,当我查询时

SELECT 2147483648:: BIGINT

我得到的结果是 2147483647 - 这比我输入的数字少一。

当我查询时

SELECT 2147483648:: INTEGER

我收到“错误:pg_atoi:读取错误“2147483648”:数值结果超出范围”

为什么会这样?

【问题讨论】:

我手头没有 Netezza,但两个版本都可以在 Postgres 中使用。 【参考方案1】:

该值的 BIGINT 的 CAST 应该可以正常工作:

TESTDB.ADMIN(ADMIN)=> SELECT 2147483648::BIGINT;
  ?COLUMN?  
------------
 2147483648
(1 row)

CAST 转换为整数失败,因为值 2,147,483,648 超出了 INTEGER 数据类型(-2,147,483,648 到 2,147,483,647)允许的范围,which is documented here。

TESTDB.ADMIN(ADMIN)=> SELECT 2147483648::INTEGER;
ERROR:  pg_atoi: error reading "2147483648": Numerical result out of range

【讨论】:

我应该更加关注整数的数据类型文档。但是,BIGINT 仍然无法正常工作...... 提供 select VERSION() 和 show 的实际输出和你的 CAST 到 BIGINT 我不确定您所说的“选择版本()”是什么意思,所以我假设我想输入“选择版本(2147483648)”?如果是这样,我收到一个错误:“错误:函数'VERSION(INT8)'不存在无法识别满足给定参数类型的函数您可能需要添加显式类型转换”顺便感谢您的帮助! 我的意思是“选择版本();”并显示它的输出。 输出为:版本 7.2.0.6-P1 [Build 46376]

以上是关于为啥 BIGINT/INT 在 Netezza 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Netezza 序列下一个值给出随机值?

MySQL中数字类型的最大值 - int无法储存11位手机号码 - bigint, int, tinyint

MySQL中数字类型的最大值 - int无法储存11位手机号码 - bigint, int, tinyint

mysql bigint ,int , smallint,tinyint 的范围

Mysql Bigint数据类型带空格

Oracle 到 Netezza 的迁移 - Connect Prior ...开始在 Netezza 中等效