【问题标题】:CAST(VARCHAR2 AS NUMERIC) with "." in the VARCHARCAST(VARCHAR2 AS NUMERIC) 带“.”在 VARCHAR
【发布时间】:2021-01-07 17:08:10
【问题描述】:

在 Oracle SQL 中将VARCHAR2 转换为Number 时遇到问题。

我的VARCHAR2有以下特点:0.000

例如:Campo1 的值为18.123(带有.

但我得到一个错误:

  1. 00000 - “无效号码”

尝试转换时:

SELECT SUM(CAST(Campo1 AS NUMERIC)) AS VOLUME
FROM TESTE_NUMBER
WHERE Timestamp = '18/09/2020'

是否可以转换该字符串?

谢谢

【问题讨论】:

  • 你能用to_number吗?
  • 是的,@JeffreyDrake。但同样的错误

标签: sql oracle casting varchar2


【解决方案1】:

是的,如果你删除空格:

SELECT SUM(CAST(REPLACE(Campo1, ' ') AS NUMERIC)) AS VOLUME
FROM TESTE_NUMBER
where Timestamp = '18/09/2020';

'1722. 0000' 应该是 '1722.0000'。


使用安全转换“Safe” TO_NUMBER() 会将错误值默认为 0:

SELECT SUM(CAST(Campo1 AS NUMERIC DEFAULT 0 ON CONVERSION ERROR)) AS VOLUME
FROM TESTE_NUMBER
where Timestamp = '18/09/2020';

db<>fiddle demo

【讨论】:

  • 感谢您回答我,卢卡斯。但是继续插入您编写的选择时出现相同的错误:/
【解决方案2】:

您可以先检查它是否看起来像一个数字。对于非负数:

select sum(case when regexp_like(campo1, '^[0-9]+[.]?[0-9]*$')
                the to_number(campo1)
           end)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2016-11-14
  • 1970-01-01
  • 2015-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多