oralce正则表达式 替换非数字字符

本文详细介绍了SQL中的正则表达式运算符和函数,包括REGEXP_SUBSTR、REGEXP_INSTR、REGEXP_REPLACE、REGEXP_LIKE等,并通过示例展示了它们的具体使用方法。
部署运行你感兴趣的模型镜像

替换非字符的内容

REGEXP_REPLACE(字段名,'[^0-9]','' )


l         正则表达式运算符和函数

 

a)      REGEXP_SUBSTR

REGEXP_SUBSTR为指定字符串的一部分与正则表达式建立匹配。语法如下:

REGEXP_SUBSTR(source_string,

pattern,

start_position,

occurrence,

match_parameter)

其中source_string是必须的。可以是带引号的字符串或者变量。Pattern是用单引号引用的与正则表达式。Start_position指定了在字符串中的准确位置,默认值为1。Occurrence是一个选项,指定在源字符串匹配过程中相对其他字符串,哪个字符串应该匹配。最后,match_parameter也是一个选项,指定在匹配时是否区分大水写。

示例1

SQL> select regexp_substr('The zip code 80831 is for falcon, co','[[:digit:]]{5}' ) REGEXP_SUBSTR from dual;

 

REGEXP_SUBSTR

-------------

80831

 

示例2

SQL> select regexp_substr('The zip code 80831 is for falcon, co', '[[:alpha:]]{3,}', 1, 3) REGEXP_SUBSTR from dual;

 

REGEXP_SUBSTR

-------------

code

 

示例3

 

SQL> select regexp_substr('comments or questions - email feedback@plsqlbook.com', '[[:alnum:]](([_\.\-\+]?[[:alnum:]]+)*)@' ||

 2         '([[:alnum:]]+)(([\.-]?[[:alnum:]]+)*)\.([[:alpha:]]{2,})') REGEXP_SUBSTR

 3    from dual;

 

REGEXP_SUBSTR

----------------------

feedback@plsqlbook.com

 

 

b)      REGEXP_INSTR

REGEXP_INSTR返回与正则表达式匹配的字符和字符串的位置。如

 

SQL> select regexp_instr('The zip code 80831 is for falcon, co', '[[:digit:]]{5}') REGEXP_INSTR from dual;

 

REGEXP_INSTR

------------

          14

 

c)      REGEXP_REPLACE

REGEXP_REPLACE与REPLACE函数类似,提供一种修改与所给正则表达式匹配的字符串的方法。作用包括纠正拼写错误、格式化输入输出的文本。

如电话号码的格式为:719-111-1111。使用REGEX_REPLACER的返回值是:

SQL> select regexp_replace('Reformat the phone number 719-111-1111 ...',

  2         '[1]?[-.]?(\(?[[:digit:]]{3}\)?)+[- .]?'

  3         || '([[:digit:]]{3})[- .]?([[:digit:]]{4})',

  4         ' (\1) \2-\3') regexp_replace

  5    from dual;

 

REGEXP_REPLACE

---------------------------------------------

Reformat the phone number  (719) 111-1111 ...

S

d)      REGEXP_LIKE

REGEXP_LIKE运算符与LIKE运算符相似,但是功能更强大,因为它支持使用与此正则表达式与文本进行匹配。语法如下:

REGEXP_LIKE(source_string, pattern, match_parameter)

Source_string可以是文字字符串,如果前面例中的字符串,也可以是包含某些字符串的变量或列。Pattern是要进行匹配的正则表达式。Match_parameter用于指定在匹配时是否区分大小写。

SQL> select ename, job

  2    from emp

  3   where regexp_like(job, '(clerk|analyst)', 'i');

 

ENAME      JOB

---------- ---------

SMITH      CLERK

SCOTT      ANALYST

ADAMS      CLERK

JAMES      CLERK

FORD       ANALYST

MILLER     CLERK

转自:http://blog.itpub.net/20948385/viewspace-665735/

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

### Oracle 正则表达式匹配多个字符的使用方法 在 Oracle 数据库中,`REGEXP_LIKE` 函数用于执行基于正则表达式的模式匹配。当需要匹配多个字符时,可以通过定义更复杂的正则表达式来实现这一目标。以下是具体的方法和示例。 #### 方法描述 为了匹配多个字符,可以使用元字符 `.` 来表示任意单个字符,并结合量词 `{n,m}` 或其他通配符来指定匹配的数量范围。例如: - `.{3,5}` 表示匹配连续 3 到 5 个任意字符。 - `[a-zA-Z]{2,}` 表示匹配至少两个字母字符(大小写均可)。 此外,在实际应用中,通常还需要考虑边界条件以及特殊字符的转义处理[^1]。 #### 示例代码 以下是一些具体的 SQL 查询示例,展示如何使用正则表达式匹配多个字符。 ##### 示例 1:匹配长度为 4 至 8 的任意字符串 ```sql SELECT * FROM your_table WHERE REGEXP_LIKE(your_column, '.{4,8}'); ``` 此查询将返回列 `your_column` 中所有包含 4 到 8 个任意字符的数据行[^1]。 ##### 示例 2:匹配由字母组成的单词,且长度大于等于 6 ```sql SELECT * FROM your_table WHERE REGEXP_LIKE(your_column, '[A-Za-z]{6,}'); ``` 该语句会筛选出那些只含有英文字母并且其长度不少于 6 位的所有记录[^1]。 ##### 示例 3:去除特定格式前缀并保留其余部分 如果存在一些数据项是以某种固定的数字加顿号形式作为前缀,则可通过如下方式将其清除掉: ```sql UPDATE your_table SET your_column = REGEXP_REPLACE(your_column , '^[0-9]+[:、]', '') WHERE REGEXP_LIKE(your_column , '^[0-9]+[:、]'); ``` 这里运用到了前面提到过的 `REGEXP_REPLACE()` 函数来进行替换操作,同时配合 `REGEXP_LIKE()` 进行初步过滤[^2]。 #### 后向引用的应用实例 假设有一张员工表 employee ,其中 full_name 存储的是形如 “FirstName LastName” 形式的姓名字段 。现在希望重新排列成 “LastName, FirstName”的样式存储回数据库里去的话就可以这样写: ```sql UPDATE employees SET last_first_name = REGEXP_REPLACE(full_name ,'(.*)( )(.*)', '\3,\1'); ``` 在这个例子当中 `(.*?) (.*?)` 定义了一个分组捕获机制分别获取名字与姓氏然后通过 `\ 数字索引`的方式取出对应位置上的值完成最终拼接效果[^4]。 ### 注意事项 - 需要确保所编写的正则表达式逻辑清晰无误以免造成不必要的错误; - 对于复杂场景建议先做测试验证后再正式上线运行; - 如果涉及到大量数据的操作最好提前做好性能评估工作防止长时间锁定资源影响业务正常运转。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值