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 中创建表的数据和时间
如何从 Aginity 工作台检查在 IBM Netezza SQL 中处理表的数据和时间?