我有一個案例,我從 DB 獲取資料并使用 TO_NUMBER 將字串轉換為數字,但是當字串是一個帶有未知字符或空格字符的空字串時,這種情況會失敗
columnA
------
4444
333333
字串 '4444' 和 '333333' 被轉換為數字,因為第二個字串出現錯誤“ora-01722 invalid number”。
這可以通過 DECODE 或 CAST 以任何方式處理,因為我需要使用 TO_NUMBER 進行進一步處理嗎?
uj5u.com熱心網友回復:
我希望這可以成為您問題的洞察力。
select
TO_NUMBER(trim(colA)),
TO_NUMBER(REGEXP_REPLACE(colA,'(^[[:space:]]*|[[:space:]]*$)')),
regexp_instr(colA, '[0-9.]')
from
(
select ' 123' colA from dual
union all
select ' ' colA from dual
union all
select '.456' colA from dual
)
這是類似的問題:在 Oracle 中的字串中修剪空格(新行和制表符空間)
uj5u.com熱心網友回復:
- 如果該列中的所有資料都由整數、帶有前導和/或尾隨空格的整數、空值和只有空格組成,那么只使用
TRIM()函式就足夠了,例如
SELECT TRIM(columnA)
FROM t
這將比使用正則運算式的函式性能更高
但
- 如果資料包含十進制數字、字母、標點和特殊字符以及空格和空值,則使用
SELECT TRIM('.' FROM REGEXP_REPLACE(columnA,'[^[:digit:].]'))
FROM t
其中最多有一個點字符被假定在開始和結束數字之間。如果有任何開頭和結尾的點,則在操作結束時修剪所有前導點和尾隨點。其他字符已被正則運算式洗掉。
- 如果您確定沒有尾隨或前導點,則使用
SELECT REGEXP_REPLACE(columnA,'[^[:digit:].]')
FROM t
就足夠了
Demo
您可以TO_NUMBER()根據您的情況在最后用函式包裝任何運算式
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/367867.html
上一篇:按條件連接列(oracle)
