我已经构建这样的价值观:转化逗号数量并限制到3位小数
0,132
6,0999999999999999E-2
而且我希望它成为本:
0.132
0.060
使用Oracle数据库的SQL查询?
将逗号转为点并仅保留3个小数点。格式化试用CAST和TO_NUMBER,但它没有奏效。
我已经构建这样的价值观:转化逗号数量并限制到3位小数
0,132
6,0999999999999999E-2
而且我希望它成为本:
0.132
0.060
使用Oracle数据库的SQL查询?
将逗号转为点并仅保留3个小数点。格式化试用CAST和TO_NUMBER,但它没有奏效。
您可以使用Oracle的TO_NUMBER,更换和全面的功能是这样的:
SELECT round(to_number(replace(string,',','.')),3) FROM dual
works thx sagi! – Menkes
您也可以使用可选的第三个参数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设置为',.'
,但更安全的做法是不要假设运行此查询的任何人都将具有特定设置并使其成为查询的一部分。
原始数据的数据类型是什么? – trincot
VARCHAR2(4000 BYTE) – Menkes