将逗号转换为数字并限制为3个小数位

时间:2016-03-15 12:58:57

标签: sql oracle11g oracle-sqldeveloper

我的结构价值如下:

0,132
6,0999999999999999E-2

我希望它成为这个:

0.132
0.060

在oracle db中使用sql查询?

将逗号转换为点并仅保留3个小数点。尝试使用格式化的CAST和TO_NUMBER,但它没有工作。

2 个答案:

答案 0 :(得分:2)

你可以使用ORACLE来编号,替换和舍入这样的函数:

SELECT round(to_number(replace(string,',','.')),3) FROM dual

答案 1 :(得分:0)

您还可以使用the to_number() function的可选第三个参数将逗号指定为小数点分隔符。使用CTE提供字符串值:

with t (str) as (
  select '0,132' from dual
  union all select '6,0999999999999999E-2' from dual
)
select to_number(str, '9D9999999999999999EEEE', 'NLS_NUMERIC_CHARACTERS='',.''')
  as num
from t;

      NUM
----------
      .132
      .061

格式模型需要在小数点分隔符后面有足够的数字才能获得表中最精确的数字。 EEEE format处理科学记数法。

然后,您可以使用round()trunc()限制为三位小数;舍入对您的样本值没有影响,但截断显示第二个值从0.061变为0.060:

with t (str) as (
  select '0,1322' from dual
  union all select '6,0999999999999999E-2' from dual
)
select trunc(to_number(str, '9D9999999999999999EEEE',
  'NLS_NUMERIC_CHARACTERS='',.'''), 3)  as num
from t;

       NUM
----------
      .132
       .06

如果您愿意,可以使用to_char()(或您的客户端/应用程序)显示前导零和尾随零。

您还可以将会话NLS_NUMERIC_CHARACTERS设置为',.',但不要假设运行此查询的任何人都具有特定设置并使其成为查询的一部分更安全。