2

Oracle REGEXP_REPLACE を使用して、文字列からいくつかのドットを削除したいと考えています。存在する場合は、2 番目のドットから削除する必要があります。例えば:

4       => 4
5       => 5
5.1     => 5.1
5.1.1   => 5.11
5.1.2   => 5.12
5.1.2.1 => 5.121
5.1.2.2 => 5.122
6       => 6

私はこれを持っています

select REGEXP_REPLACE(num, '(\d+)(\.)(\d+)(\.)(\d+)', '\1.\3\5')
from my_table;

問題は、クエリが 2 つのドットだけで作成されていることです。文字列に 3 つ以上のドットがある場合は、クエリを変更してより多くのドットを受け入れるようにする必要があります。これを自動的に行う方法はありますか?

ありがとう

4

2 に答える 2

2

考えられる「汚い」解決策

select REGEXP_REPLACE(num, '(\d+)(\.)(.*)', '\1\2') || 
       REPLACE( REGEXP_REPLACE(num, '(\d+)(.*)', '\2') ,'.','') 
from my_table;

まったく明確ではありませんが、機能します。

于 2012-06-12T18:20:19.020 に答える
1
SELECT SUBSTR(mystr, 1, INSTR(mystr,'.'))
       || REPLACE(SUBSTR(mystr, INSTR(mystr,'.')+1),'.')
FROM my_table;
于 2012-06-13T07:29:09.547 に答える