在Oracle上用十进制将VARCHAR转换为NUMBER

时间:2019-05-07 17:58:58

标签: oracle oracle12c

我在转换VARCHAR2信息时遇到了一些麻烦,例如:

  • -111.21
  • 11.11
  • -51.146610399175472

NUMBER。我想将这些数字存储在NUMBER(19,16)列中。这些值大多是坐标(纬度和经度)。

我已经尝试了使用不同值的不同命令:

select cast('-111.21' as NUMBER) from dual
select cast('-111.21' as decimal) from dual
select cast('111.21' as decimal) from dual
select to_number('-1.1') from dual
select to_decimal('-1.1') from dual

但是我总是收到错误:

  

指定的号码无效

此SQL:

select to_number('-134.33','099.99') from dual;

有效,但是数字上的任何更改(例如更改为'-34.33')都将返回相同的错误。

我在这里做错了什么?显然我在这里丢失了一些东西,但我不知道是什么。

1 个答案:

答案 0 :(得分:0)

我发现了问题。我需要将掩码作为参数传递给to_number函数。像'999.999999999999999'

所以:

select to_number('90.79493','999.999999999999999') from dual;
select to_number('90.146610399175472','999.999900000000000') from dual;
select to_number('90.34234324','999.999999999999999') from dual;

适用于不同大小的数字。