IBM Netezza,如何使用 TO_NUMBER(..., ...) 将 varchar 转换为数字

Posted

技术标签:

【中文标题】IBM Netezza,如何使用 TO_NUMBER(..., ...) 将 varchar 转换为数字【英文标题】:IBM Netezza, How to convert a varchar to a numeric with TO_NUMBER(..., ...) 【发布时间】:2013-08-28 14:42:29 【问题描述】:

我在 Netezza 数据库中有名为 DART_STG1 的表。该表有一个 varchar 列。我正在尝试使用下面的 SQL 将 varchar 转换为数字,但它总是会引发错误。

代码

SELECT DISTINCT TO_NUMBER(M12,'99G99') 
FROM   DART_STG1 
WHERE  M12 IS NOT NULL;

引发错误:

错误 [HY000] 错误:错误的数字输入格式

这个错误是什么意思?

【问题讨论】:

SELECT DISTINCT M12 FROM DART_STG1 WHERE M12 IS NOT NULL; 的结果是什么?根据错误消息,我的猜测是一条或多条记录具有无法转换的数据,因此您可能需要进行一些数据按摩才能使其正确转换。 数据按摩是什么意思? 我在执行那个 SQL 查询时没有得到任何输出。 我有 NOT NULL 和 NULL 值。 【参考方案1】:

PDA (Netezza) Conversion functions page 提供示例,与Template patterns 一起,您可以选择合适的格式。

但是,我的数据集出现了同样的错误。我怀疑这与 STORE_NUMBER 中值的格式有关,这是 Netezza 不喜欢的。

【讨论】:

【参考方案2】:

错误:

ERROR [HY000] ERROR: Bad numeric input format 

是因为您将字母输入TO_NUMBER。你喂它99G99 这不是一个数字。

程序试图通过告诉您数字输入格式错误来告诉您它不是数字,正如错误非常清楚地表明的那样。

【讨论】:

如何使用TO_NUMBER函数将字符串转为整数? to_number(STORE_NUMBER, '999') - 即使这样也会返回错误。这里的实际问题是“正确的输入格式应该是什么?”我们都知道错误信息在英语中的含义。

以上是关于IBM Netezza,如何使用 TO_NUMBER(..., ...) 将 varchar 转换为数字的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Aginity 工作台检查在 IBM Netezza SQL 中创建表的数据和时间

IBM Netezza - 过程使用的表

如何从 Aginity 工作台检查在 IBM Netezza SQL 中处理表的数据和时间?

从 IBM DB2 迁移到 Netezza 的挑战

在 IBM netezza aginity sql 数据库工作台中导出大表时如何添加列名

使用 ODBC 连接将 R Studio 连接到 IBM Netezza 数据库 [关闭]