1

table_1 に [10.10.10.10] または [10.200.1] という名前の mac 値がある場合、10.10.10.10 または 10.200.1 という数字だけを選択するにはどうすればよいですか?

それはsubstrを使ったものですが、使い方がわかりません:(

 select ???? from tabel_1...??

私を助けてください

4

4 に答える 4

3

REGEXP_REPLACE を使用できます

'[' と ']' をすべて英数字で削除:

select REGEXP_REPLACE('[10.100.1.1]ASDA1D', '(\[)|(\]([[:alnum:]]*))', '') from dual
于 2013-04-11T12:57:47.270 に答える
1

[10.100.1.1] が必ずしも文字列の先頭にない場合は、これを使用できます。

select regexp_replace('foo [10.100.1.1]whatever', '^.*?\[([0-9.]+)\].*$', '\1') from dual;

もしそれが:

 select regexp_replace('[10.100.1.1] whatever', '^\[([0-9.]+)\].*$', '\1') from dual;
于 2013-04-11T13:39:29.947 に答える
0

パターン マッチングにOracle の正規表現関数を使用することを検討してください。このパターンは、長さに関係なく、[との間のすべてをキャプチャします。]

select regexp_substr('[105.102.10.10]', '^\[(.*)\]$', 1, 1, null, 1) value
from dual;

[パターンが で始まり で終わるかどうかを気にしない場合は、および文字]を削除します。^$

select regexp_substr('[105.102.10.10]', '\[(.*)\]', 1, 1, null, 1) value
from dual;
于 2013-04-11T12:57:44.380 に答える
0

正規表現を使用したくない場合は、次のようにinstr()組み込み関数を使用することもできます。substr()

SELECT substr('[10.10.10.10] asdf', 2, instr('[10.10.10.10] asdf', ']') - 2)
FROM dual

クロージングの位置を検索し、と の両方で]この位置を 2 減らします。[]

于 2013-04-11T13:50:46.947 に答える