使用 TO_NUMBER 解析固定计数法和科学计数法中的数字

Using TO_NUMBER to parse numbers both in fixed notation and scientific notation

使用 Oracle SQL,当字符串(VARCHAR2 列)可以包含以下任一内容时,如何将字符串转换为数字:

到目前为止,我使用了以下 format models:

但我找不到适用于这两种情况的单一格式模型。

示例数据:

 STRING_VALUE
------------------------
 -4.0504035245989348E-3 
 -11.496606820938826    
------------------------

我正在使用 Oracle 12.1,所以我不能使用任何一个 VALIDATE_CONVERSION nor ON CONVERSION ERROR

编辑

此外,此代码将在具有不同 NLS 设置的不同环境中 运行;我不能假设在没有格式模型的情况下使用 TO_NUMBER 就可以工作。

使用 CASE 语句怎么样?

CREATE TABLE t (v VARCHAR2(30));
INSERT INTO t VALUES ('-11.49660682093882');
INSERT INTO t VALUES ('-4.0504035245989348E-3');

SELECT v, CASE WHEN v LIKE '%E%' 
           THEN TO_NUMBER(v, '999.999999999999999999EEEE', 'NLS_NUMERIC_CHARACTERS=''. ''')
           ELSE TO_NUMBER(v, '999.999999999999999999',     'NLS_NUMERIC_CHARACTERS=''. ''') 
          END AS x
  FROM t;

V                        X
-11.49660682093882       -11,49660682093882
-4.0504035245989348E-3   -0,0040504035245989348