我已經構建這樣的價值觀:轉化逗號數量並限制到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