2016-03-15 91 views
1

我已经构建这样的价值观:转化逗号数量并限制到3位小数

0,132 
6,0999999999999999E-2 

而且我希望它成为本:

0.132 
0.060 

使用Oracle数据库的SQL查询?

将逗号转为点并仅保留3个小数点。格式化试用CAST和TO_NUMBER,但它没有奏效。

+0

原始数据的数据类型是什么? – trincot

+0

VARCHAR2(4000 BYTE) – Menkes

回答

2

您可以使用Oracle的TO_NUMBER,更换和全面的功能是这样的:

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

works thx sagi! – Menkes

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设置为',.',但更安全的做法是不要假设运行此查询的任何人都将具有特定设置并使其成为查询的一部分。