2012-08-08 188 views
3

有一個Trim函數,我可以修剪一個特定的字符,但我想知道它是否可以修整整數。從一個字符串修剪整數

我有一個字符串列表:

'ABC01' 
'ABCD02' 
'AB5123' 

長度和數量是不規則的。 後,我運行一個SQL命令,我想會得到:

'ABC' 
'ABCD' 
'AB' 

回答

3

我會使用translate function。與簡單的文本處理功能相比,Oracle中的REGEXP功能往往是CPU豬。

select translate(string, 'A1234567890', 'A') 
from t; 

的「A」的第二個參數的開始,最後一個參數了匹配的翻譯「A」 s到「A」 S,什麼都不做,但沒有在第三個參數字符串,ORACLE的東西將返回null。

編輯簡單的測試用例

SQL> create table t (string varchar2(100)); 
Table created. 
SQL> insert into t values ('ABC01'); 
1 row created. 
SQL> insert into t values ('ABCD02'); 
1 row created. 
SQL> insert into t values ('AB5123'); 
1 row created. 
SQL> insert into t values ('ABCDEFGHIJKLMNOPQRSTUVWXYZ' 
    2  || 'abcdefghijklmnopqrstuvwxyz1234567890'); 
1 row created. 
SQL> insert into t values ('123AB456'); 
1 row created. 
SQL> insert into t values ('!Whatever!1'); 
1 row created. 
SQL> commit; 
Commit complete. 

SQL> select translate(string, 'A1234567890', 'A') 
    2 from t; 

TRANSLATE(STRING,'A1234567890','A') 
--------------------------------------------------- 
ABC 
ABCD 
AB 
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 
AB 
!Whatever! 

6 rows selected. 
1
SELECT regexp_replace(<<column name>>, '[[:digit:]]', null) 
    FROM <<table name>> 

會從字符串中刪除所有的數字。