2016-03-15 53 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設置爲',.',但更安全的做法是不要假設運行此查詢的任何人都將具有特定設置並使其成爲查詢的一部分。