我有以下 Oracle SQL 代碼:
SELECT TO_NUMBER(TRIM(REGEXP_REPLACE(per_growth, '(%)(\s)')),
'FM99999999999999999990D099999999999999999',
'NLS_NUMERIC_CHARACTERS = '', ''') AS per_growth
FROM sometable;
此代碼應該先查找百分號,然后再查找空格并將它們從結果中排除。然而,它顯示
ORA-01722 : 無效號碼
錯誤。我正在學習sql,但不知道確切原因。是不是出了什么問題(%)(\s)?表中值為50%
uj5u.com熱心網友回復:
你試過好嗎,老REPLACE?
select replace(replace(per_growth, '%', ''), ' ', '') as result
from your_table
uj5u.com熱心網友回復:
您可以使用
REGEXP_REPLACE(per_growth, '( )(%)')
為了擺脫%標志和whitespace(s)在一起
或者
TRIM(REPLACE(per_growth,'%'))
先去掉%符號,然后再leading去掉trailing空格,
數值轉換前。
uj5u.com熱心網友回復:
您可以使用TRANSLATE洗掉不需要的字符的所有實體:
SELECT TO_NUMBER(
TRANSLATE(per_growth, '0% ', '0'),
'FM99999999999999999990D099999999999999999',
'NLS_NUMERIC_CHARACTERS = '', '''
) as per_growth
FROM sometable;
注意:TRANSLATE(expr, from_string, to_string)通過將字符的所有實體from_string與對應的字符交換來作業to_string,如果其中的字符from_string多于to_string則剩余的字符將被洗掉。它比使用正則運算式更快,并且與 using 相當,REPLACE但它可以一次處理多個替換,而這REPLACE是不能的。
如果您確實想使用較慢的,REGEXP_REPLACE那么您可以使用以下方法替換所有空白字符和所有百分比字符,無論是否一起使用:
SELECT TO_NUMBER(
REGEXP_REPLACE(per_growth, '[%[:space:]]'),
'FM99999999999999999990D099999999999999999',
'NLS_NUMERIC_CHARACTERS = '', '''
) as per_growth
FROM sometable;
其中,對于樣本資料:
CREATE TABLE sometable (per_growth) AS
SELECT '1%' FROM DUAL UNION ALL
SELECT '%2' FROM DUAL UNION ALL
SELECT '3 %' FROM DUAL UNION ALL
SELECT '4% ' FROM DUAL UNION ALL
SELECT '5,0%' FROM DUAL UNION ALL
SELECT '%%% 123 456 789,0123456 %' FROM DUAL;
兩個輸出:
PER_GROWTH 1 2 3 4 5 123456789.0123456
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/467489.html
上一篇:在兩列中查找具有重復值的行,其中一列中的至少一個值是特定值
下一篇:計算一個id的每個進出持續時間
