`
flforever1213
  • 浏览: 124769 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle 中的正则函数

阅读更多

保存在这里,方便自己以后查看 (⊙_⊙) ╮(╯▽╰)╭

 

这个是函数中将会用到的模式串的介绍:

 

Oracle 中的正则函数一共有5个:

REGEXP_COUNT -- 统计子串出现的次数

REGEXP_INSTR -- 查找子串在母串中的位置

REGEXP_LIKE -- 模糊查询子串

REGEXP_REPLACE -- 替换

REGEXP_SUBSTR -- 截取

 

以下是官方关于这5个函数可能会用到的参数的介绍:

  • source_char is a character expression that serves as the search value. It is commonly a character column and can be of any of the datatypes CHARVARCHAR2NCHARNVARCHAR2CLOB, or NCLOB.


  • pattern is the regular expression. It is usually a text literal and can be of any of the datatypes CHARVARCHAR2NCHAR, or NVARCHAR2. It can contain up to 512 bytes. If the datatype of pattern is different from the datatype of source_char, Oracle Database converts pattern to the datatype of source_char. For a listing of the operators you can specify in pattern, please refer to Appendix C, "Oracle Regular Expression Support".


  • position is a positive integer indicating the character of source_char where Oracle should begin the search. The default is 1, meaning that Oracle begins the search at the first character of source_char.


  • occurrence is a positive integer indicating which occurrence of pattern in source_char Oracle should search for. The default is 1, meaning that Oracle searches for the first occurrence of pattern.


  • return_option lets you specify what Oracle should return in relation to the occurrence:

    • If you specify 0, then Oracle returns the position of the first character of the occurrence. This is the default.

    • If you specify 1, then Oracle returns the position of the character following the occurrence.

  • match_parameter is a text literal that lets you change the default matching behavior of the function. You can specify one or more of the following values for match_parameter:

    • 'i' specifies case-insensitive matching.

    • 'c' specifies case-sensitive matching.

    • 'n' allows the period (.), which is the match-any-character character, to match the newline character. If you omit this parameter, the period does not match the newline character.

    • 'm' treats the source string as multiple lines. Oracle interprets ^ and $ as the start and end, respectively, of any line anywhere in the source string, rather than only at the start or end of the entire source string. If you omit this parameter, Oracle treats the source string as a single line.

    • 'x' ignores whitespace characters. By default, whitespace characters match themselves.

1. REGEXP_COUNT(<source_string>, <pattern>[[, <start_position>], [<match_parameter>]])

-- 从'123123123123123'串中查找'123'子串的个数,起始查找位置为1
select regexp_count('123123123123123', '123', 1, 'i') from dual;
→ 5
 

2. REGEXP_INSTR(<source_string>, <pattern>

   [[, <start_position>][, <occurrence>][, <return_option>][, <match_parameter>][,<sub_expression>]])

-- 从'500 Oracle Parkway, Redwood Shores, CA'串中查找 至少包含一个非空格字符的子串的位置
-- 起始查找位置为1,查找匹配的第6个子串的位置
select regexp_instr('500 Oracle Parkway, Redwood Shores, CA', '[^ ]+', 1, 6) from dual;
→ 37

-- 从'500 Oracle Parkway, Redwood Shores, CA'串中查找
-- 包含s或r或p字符,后面跟着6个字母的子串,不区分大小写('Parkway','Redwood'匹配)
-- 起始查找位置为3,查找匹配的第2个子串('Redwood'匹配)
-- 返回的位置是紧接着匹配子串后面的字符的位置('Redwood'后面空格的位置)
select regexp_instr('500 Oracle Parkway, Redwood Shores, CA',
                    '[s|r|p][[:alpha:]]{6}',
                    3,
                    2,
                    1,
                    'i')
  from dual;
→ 28
   

3. REGEXP_LIKE(<source_string>, <pattern>, <match_parameter>)

-- 从指定列中查询出含有2个连续空格的字段
select source_string
  from (select 'hello, one space!' as source_string from dual
        union all
        select 'hello, two space! ' as source_string from dual
        union all
        select 'hello, two sequential space!  ' as source_string from dual)
 where regexp_like(source_string, '[[:space:]]{2}');

-- 从指定列中查询出first_name列以'Ste'开头,'en'结尾,中间包含字母'v'或'ph'的字段
select first_name, last_name
  from (select 'Steven' as first_name, 'King' as last_name from dual
        union all
        select 'Steven' as first_name, 'Markle' as last_name from dual
        union all
        select 'Stephen' as first_name, 'Stiles' as last_name from dual)
 where regexp_like(first_name, '^Ste(v|ph)en$')
 order by first_name, last_name;
  

4. REGEXP_REPLACE(<source_string>, <pattern>, <replace_string>

   [, <position>[, <occurrence>[, <match_parameter>]]])

-- 将字符串中连续的多个空格替换成一个空格
select regexp_replace('500   Oracle     Parkway,    Redwood  Shores, CA',
                      '( ){2,}',
                      ' ')
  from dual;

-- 把'xxx.xxx.xxxx'格式的电话号码转换为'(xxx) xxx-xxxx'格式
with T1 as(
     select '515.123.4567' as phone_number from dual
     union all
     select '515.123.4568' as phone_number from dual
     union all
     select '(515) 123 4569' as phone_number from dual
     union all
     select '13207730591' as phone_number from dual)
select regexp_replace(phone_number,
                      '([[:digit:]]{3})\.([[:digit:]]{3})\.([[:digit:]]{4})',
                      '(\1) \2-\3')
  from T1;

-- 给字段的每个字符后面加上空格
with T2 as(
     select 'Argentina' as country_name from dual
     union all
     select 'Australia' as country_name from dual
     union all
     select 'Belgium' as country_name from dual
     union all
     select 'Brazil' as country_name from dual
     union all
     select 'Canada' as country_name from dual)
select regexp_replace(country_name,
                      '(.)',
                      '\1 ')
  from T2;
 

5. REGEXP_SUBSTR(<source_string>, <pattern>[, <position> [, <occurrence>[, <match_parameter>]]])

-- 截取字符串中两个','之间的子串,子串只能开头和结尾含有',',中间至少要含有一个非','字符
select regexp_substr('500 Oracle Parkway, Redwood Shores, CA', ',[^,]+,')
  from dual;

-- 截取字符串中包含 'http://' 子串,后面跟着3-4个 '字母/数字 0-1个.',再跟着0-1个 '/' 的子串
select regexp_substr('http://www.oracle.com/products',
                     'http://([[:alnum:]]+\.?){3,4}/?')
  from dual;
  
with T3 as(select '1:3,4:6,8:10,3:4,7:6,11:12' as source_string from dual)
-- 从source_string列中查找不含':'的子串,起始查找位置为1,返回第1个子串
select regexp_substr(source_string,'[^:]+', 1, 1) from T3
union all
-- 从source_string列中查找不含':'的子串,起始查找位置为3,返回第2个子串
select regexp_substr(source_string,'[^:]+', 3, 2) from T3;
0
0
分享到:
评论

相关推荐

    Oracle正则表达式函数全面解析

    ### Oracle正则表达式函数全面解析 #### 一、引言 在数据库处理文本数据时,经常需要用到模式匹配。Oracle数据库提供了丰富的正则表达式函数,这些函数可以帮助开发者更高效地进行文本匹配、搜索和替换等操作。本文...

    Oracle数据库正则表达式

    在 Oracle 数据库中,正则表达式是一种强大的模式匹配工具,可以帮助用户快速搜索、替换和验证数据。从 Oracle 10g 开始,Oracle 内建了符合 IEEE POSIX (Portable Operating System for Unix)标准的正则表达式,...

    Oracle正则表达式函数

    Oracle数据库系统提供了...对于初学者来说,阅读《美河学习在线eimhe.com_Oracle正则表达式函数.pdf》和《美河学习在线eimhe.com_Oracle正则表达式.pdf》这两份资料,将有助于深入理解和掌握Oracle中的正则表达式功能。

    Oracle中的正则表达式

    Oracle中的正则表达式函数提供了强大的字符串处理功能,能够大大提高数据库应用程序的效率和可读性。 正则表达式的基本概念包括: * 元字符和普通字符:元字符是指在正则表达式中表示特殊含义的字符,如"."、"\"、...

    Oracle正则表达式详解(用法+实例)

    ### Oracle正则表达式详解(用法+实例) #### 一、正则表达式简介 正则表达式是一种用于匹配字符串中字符组合的工具。它由一个或多个字符及特殊的字符元组成,能够帮助我们执行复杂的字符串搜索和替换任务。在...

    Oracle的正则表达式

    在PL/SQL中,你可以使用`REGEXP_LIKE`函数来判断一个字符串是否符合某个正则表达式模式,`REGEXP_SUBSTR`函数用于提取匹配的部分,而`REGEXP_REPLACE`函数则可以替换符合模式的部分。 举例来说,如果你有一个员工表...

    Oracle通过正则表达式分割字符串 REGEXP_SUBSTR的代码详解

    REGEXP_SUBSTR函数格式如下: function REGEXP_SUBSTR(string, pattern, position, occurrence, modifier) string :需要进行正则处理的字符串 pattern :进行匹配的正则表达式 position :起始位置,从第几个...

    ORACLESQL正则表达式.pdf

    正则表达式是在 Oracle 10g 中添加的新特性,用于匹配字符串中的模式。下面是 ORACLE SQL 正则表达式的相关知识点: 匹配字符 * `[:alnum:]` 匹配任何字母和数字 * `[:alpha:]` 匹配任何字母 * `[:blank:]` 匹配...

    oracle正则表达式

    PDF文件"Oracle正则表达式函数介绍.pdf"很可能详细介绍了这些函数的使用方法、模式语法和实例,而"Oracle_正则表达式.txt"可能包含了更多示例或使用技巧。对于学习和理解Oracle正则表达式,这两个文件都是宝贵的资源...

    Oracle正则表达式函数介绍.rar

    在Oracle中,正则表达式通过内置的函数实现,这些函数极大地增强了SQL查询的能力。 1. **REGEXP_LIKE()** `REGEXP_LIKE()` 是Oracle中使用正则表达式进行模式匹配的主要函数。它的基本语法是: ``` REGEXP_LIKE...

    Oracle正则表达式函数介绍[定义].pdf

    Oracle数据库系统支持正则表达式,这为在SQL查询中进行复杂文本匹配提供了强大的工具。...这就是Oracle正则表达式函数的强大之处,能够处理更复杂、灵活的文本匹配需求,极大地扩展了SQL的查询能力。

    Oracle 10g正则表达式函数

    Oracle 10g 正则表达式函数是 Oracle 数据库中的一种功能强大且灵活的字符串处理函数。它可以实现复杂的字符串匹配和提取功能,非常适合处理非结构化数据。 1. 元字符 在 Oracle 10g 正则表达式中,元字符是特殊的...

    ORACLE_正则表达式摘录笔记

    九、Oracle正则表达式函数 1. `regexp_like(expression, regexp)`: 判断`expression`是否符合`regexp`的模式,返回布尔值。例如,`select * from people where regexp_like(name, '^J.*$')`等同于`select * from ...

    ORACLE正则表达式

    ORACLE 中的正则表达式函数 ------------------------- ORACLE 提供了 4 个函数来使用正则表达式: 1. `regexp_like(x, pattern)`: 当 x 能正确匹配字符串时返回 true。 2. `regexp_instr(x, pattern)`: 在 x 中...

    Oracle 10g正则表达式

    在Oracle 10g中,主要提供了四个与正则表达式相关的函数: 1. **REGEXP_LIKE**: 类似于`LIKE`函数,用于判断字符串是否符合指定的正则表达式模式。例如,要查找以数字"3"开头,后面跟着任意两个字符,然后是数字"41...

    oracle约束和索引笔记

    本笔记主要探讨了两个关键概念:约束和索引,这些都是Oracle数据库中的基础但至关重要的元素。 **1. 约束(Constraints)** 约束是Oracle数据库中用于确保数据完整性的规则。它们分为以下几种类型: - **非空约束...

Global site tag (gtag.js) - Google Analytics