代码之家  ›  专栏  ›  技术社区  ›  KinsDotNet

为什么从运行regexp\u replace的varchar字段中得到一个无效的数字?

  •  0
  • KinsDotNet  · 技术社区  · 8 年前
    SELECT REGEXP_REPLACE (FIRST, '[^a-zA-Z0-9]+', '', 'g')
      FROM example
     WHERE LAST LIKE '%Belanger%'
    

    “first”是varchar2字段。我只是想从'第一个字段中删除非字母数字字符。

    3 回复  |  直到 8 年前
        1
  •  1
  •   Olivier Jacot-Descombes    8 年前

    where last LIKE 'Belanger' 仅返回 last "Belanger" . 添加适当的通配符

    WHERE last LIKE '%Belanger%'  -- contains 'Belanger'
    

    WHERE last LIKE 'Belanger%'  -- starts with 'Belanger'
    

    或

     WHERE last LIKE '%Belanger'  -- ends with 'Belanger'
    

     WHERE last = 'Belanger'  -- equals 'Belanger'
    

    regexp_replace 这是错误的。语法:

    REGEXP_REPLACE( string, pattern [, replacement_string [, start_position
                    [, nth_appearance [, match_parameter ] ] ] ] )
    

    match_parameter 必须在 start_position 和 nth_appearance TechNet REGEXP_REPLACE Function ):

    “c”执行区分大小写的匹配。
    “i”执行不区分大小写的匹配。
    “n”允许句点字符(.)与换行符匹配。
    默认情况下,句点是通配符。
    假设“m”表达式有多行,其中“^”是行的开头,$是行的结尾
    一行,不管这些字符在表达式中的位置。默认情况下,表达式假定为单行。
    忽略“x”空白字符。默认情况下,空白字符与其他字符一样匹配
    其他角色。

    但是,如果没有这个,这应该是可行的 'g'

    regexp_replace(first, '[^a-zA-Z0-9]+', '')
    
        2
  •  1
  •   mmp    8 年前

    'g' 在这个地方。下面的查询就足够了。请在@kfinity提供的文档中查看

    SELECT regexp_replace(first, '[^a-zA-Z0-9]+', '')
              FROM example
              where last LIKE '%Belanger%'
    
        3
  •  0
  •   William Robertson    8 年前

    试试这个(替换任何不在范围内的东西 a-z 或 0-9

    regexp_replace(first, '[^a-z0-9]+', '', 1, 0, 'i')
    

    或者这个(替换POSIX中的任何东西) [:alnum:] (字母数字) character class

    regexp_replace(first, '[^[:alnum:]]')