如果我在 table_1 中,在名为 mac value 的列中为 [10.10.10.10] 或 [10.200.1] 我如何只选择数字: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;
如果您不关心模式是否以开头[
和结尾,]
则删除^
and$
字符。
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[
和]