【发布时间】:2021-01-30 15:10:28
【问题描述】:
我正在尝试将字符串值相乘,即 33.000000,但出现错误 ORA-01722。
您能否建议如何正确转换/强制转换此字段以进行乘法?
选择 c1.name 作为模型, p22.value 作为基础AMT, p23.value 作为 TotalAMT
模型 BasisAMT TotalAMT
自动 0.000000 0.000000
汽车 22.000000 33.000000
自动 0.000000 0.000000
自动 0.000000 0.000000
但是我正在尝试做
选择 c1.name 作为模型, 100 * p22.value 作为基础AMT, p23.value 作为 TotalAMT
出现错误。
【问题讨论】:
-
您报告的内容,单独来看,完全是错误的。
select '33.00000000' * 3 from dual不会抛出错误;更好的是,它会返回正确的答案99。所以,还有一些你没有告诉我们的事情。你告诉我们的还不够。 -
对不起,我没有提到这个值来自字段 VARCHAR2(255 CHAR)
-
没关系。重要的是,您如何断定问题来自字符串“33.00000000”?你怎么知道它不是来自另一个字符串,不能转换为数字(也在同一列,但在不同的行)?
-
我已经更新了描述,我希望它清楚。
-
结论 在私聊中继续与OP讨论后,我们发现他的小数点是逗号。正确的解决方案是将字符串列包含在 TO_NUMBER 中并给出明确的 NLS 数字字符,如下所示:
to_number(p22.value, '9999d99999999', 'nls_numeric_characters=.,')
标签: oracle