table_1 に [10.10.10.10] または [10.200.1] という名前の mac 値がある場合、10.10.10.10 または 10.200.1 という数字だけを選択するにはどうすればよいですか?
それはsubstrを使ったものですが、使い方がわかりません:(
select ???? from tabel_1...??
私を助けてください
REGEXP_REPLACE を使用できます
'[' と ']' をすべて英数字で削除:
select REGEXP_REPLACE('[10.100.1.1]ASDA1D', '(\[)|(\]([[:alnum:]]*))', '') from dual
[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;
パターン マッチングに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;
正規表現を使用したくない場合は、次のようにinstr()
組み込み関数を使用することもできます。substr()
SELECT substr('[10.10.10.10] asdf', 2, instr('[10.10.10.10] asdf', ']') - 2)
FROM dual
クロージングの位置を検索し、と の両方で]
この位置を 2 減らします。[
]