【问题标题】:Get only number and dot in a column with mac value Replace/SubStr - ORACLE仅获取带有 mac 值 Replace/SubStr 的列中的数字和点 - ORACLE
【发布时间】:2013-04-03 16:12:32
【问题描述】:

如果我在 table_1 中,在名为 mac 值的列中为 [10.10.10.10] 或 [10.200.1] 如何只选择数字:10.10.10.10 或 10.200.1?

它是 substr 的东西,但我不知道如何使用它:(

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

请帮帮我

【问题讨论】:

标签: sql regex replace oracle10g substring


【解决方案1】:

你可以使用 REGEXP_REPLACE

删除 '[' 和 ']' 以及后面的所有字母:

select REGEXP_REPLACE('[10.100.1.1]ASDA1D', '(\[)|(\]([[:alnum:]]*))', '') from dual

【讨论】:

  • 是的,没关系,但我只想选择数字......我有类似“[10.01.01] ABCDEF”的东西,我只想要数字 10.01.01
  • select REGEXP_REPLACE('[10.1.1.1] ASDAD', '(\[)|(\])|([[:alpha:]])', '') from dual; 工作
  • 当你有select REGEXP_REPLACE('[10.1.1.1] ASD99AD', '(\[)|(\])|([[:alpha:]])', '') from dual;它不起作用,因为你有10.1.1.1 99
  • 不不,我编辑了答案节目,select REGEXP_REPLACE('[10.100.1.1]ASDA1D', '(\[)|(\]([[:alnum:]]*))', '') from dual
【解决方案2】:

如果 [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;

【讨论】:

    【解决方案3】:

    考虑使用 Oracle 的 regular expression functions 进行模式匹配。无论长度如何,此模式都会捕获 [] 之间的任何内容。

    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;
    

    【讨论】:

    • 但它也适用于 []
    • @user2207426 - 抱歉,我修好了。使用新的。
    • @user2207426 - 不确定。我复制/粘贴了上面的内容,对我来说效果很好。
    • 'ORA-00900: 无效的 SQL 语句`
    【解决方案4】:

    如果您不想使用正则表达式,您也可以使用 instr() 构建函数和 substr(),如下所示:

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

    搜索关闭] 的位置并将[] 的位置减2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-31
      • 2013-07-30
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多