3

特定の文字をトリミングできる機能があるのですが、Trim整数をトリミングできるかどうか疑問に思っていました。

文字列のリストがあります:

'ABC01'
'ABCD02'
'AB5123'

長さと数は不規則です。SQL コマンドを実行した後、これを取得したいと思います。

'ABC'
'ABCD'
'AB'
4

4 に答える 4

3

翻訳機能を使用します。Oracle の REGEXP 関数は、単純なテキスト処理関数に比べて CPU を大量に消費する傾向があります。

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

2 番目のパラメータの先頭にある "A" と最後のパラメータの一致する A は、"A" を "A" に変換し、何もしませんが、3 番目のパラメータ文字列に何かがない場合、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.
于 2012-08-08T18:31:04.117 に答える
2
select REGEXP_REPLACE(YourColumn, '[0-9]+', '') from YourTable

この SQLFiddle を見てください: http://sqlfiddle.com/#!4/b8a83/1

于 2012-08-08T18:21:01.157 に答える
1

関数REGEX_REPLACEを使用できます。

http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions130.htm

于 2012-08-08T18:17:34.870 に答える
1
SELECT regexp_replace( <<column name>>, '[[:digit:]]', null )
  FROM <<table name>>

文字列からすべての数字を削除します。

于 2012-08-08T18:19:26.550 に答える