1

如果我在 table_1 中,在名为 mac value 的列中为 [10.10.10.10] 或 [10.200.1] 我如何只选择数字: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;

如果您不关心模式是否以开头[和结尾,]则删除^and$字符。

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 回答