select TRIM(TRANSLATE('<ROOT><MPAGE32ID>20673</MP',
trim(
TRANSLATE('<ROOT><MPAGE32ID>20673</MP', '0123456789', ' ')
),
' '))
from dual
结果:3220673
内层的TRANSLATE将数字替换成空格
外层的TRANSLATE将数字之外的替换成空格,剩下的就是数字了
注意:全角数字也会被过滤掉
如:
select TRIM(TRANSLATE('<ROOT><MPAGE32ID1526>20673</MP',
trim(
TRANSLATE('<ROOT><MPAGE32ID1526>20673</MP', '0123456789', ' ')
),
' '))
from dual
结果:3220673
电话号码字段非空,且仅包含数字的:
select *
from member_user t
where t.user_mobile is not null
and translate(t.user_mobile, '0123456789', '') is null;
|
把一些全角数字转换成半角的数据,可利用oracle的 to_single_byte 这个函数就可以解决问题 比如:
UPDATE ARCHIVES_IN T1
SET T1.IN_CODE = (SELECT TO_SINGLE_BYTE(T2.IN_CODE)
FROM ARCHIVES_IN T2
WHERE T1.IN_ID = T2.IN_ID)
WHERE NOT REGEXP_LIKE(T1.IN_CODE,
'^(-{0,1}+{0,1})[0-9]+(.{0,1}[0-9]+)
但是有个问题,如果这个in_code字段中只有一个全角数字的话,需要手动的去修改一下。
|
在oracle里正则表达式有四个函数可用,分别是regexp_like、regexp_substr、regexp_instr 和regexp_replace。
REGEXP_LIKE:比较一个字符串是否与正则表达式匹配
(srcstr, pattern [, match_option])
REGEXP_INSTR:在字符串中查找正则表达式,并且返回匹配的位置
(srcstr, pattern [, position [, occurrence [, return_option [, match_option]]]])
REGEXP_SUBSTR:返回与正则表达式匹配的子字符串
(srcstr, pattern [, position [, occurrence [, match_option]]])
REGEXP_REPLACE:搜索并且替换匹配的正则表达式
(srcstr, pattern [, replacestr [, position [, occurrence [, match_option]]]])
1. select * from member_user t where regexp_like(t.user_mobile, '^1[[:digit:]]{10}');
^代表开始,
*表示出现0次或多次,
+表示出现1次或多次,
[:digit:]代表0-9的纯数字
(还有$代表以什么结尾,如果是[[:digit:]]+$代表以数字结尾)
select * from test_table where regexp_like(name,'[[:alpha:]]')
这里是表示查询匹配任意字母,也包括中文字
select * from test_table where regexp_like(name,'[[:alnum:]]')
这里是表示查询匹配任意字母和数字
select * from test_table where regexp_like(name,'[[:digit:]]')
这里是表示查询匹配任意数字
Select * from test_table Where regexp_like(name,’of’,’i’)
这里就是of不区分大小写
Select * from test_table Where regexp_like(name,’^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$’)
这样我们可以查询是不是ip格式
REGEXP_SUBSTR与SUBSTR函数相同,返回截取的子字符串
REGEXP_SUBSTR(srcstr, pattern [, position [, occurrence [, match_option]]])
注:
srcstr 源字符串
pattern 正则表达式样式
position 开始匹配字符位置
occurrence 匹配出现次数
match_option 匹配选项(区分大小写)
SELECT regexp_substr('1PSN/231_3253/ABc', '[[:alnum:]]+') FROM dual;
Output: 1PSN
[[:alnum:]]+ 表示匹配1个或者多个字母或数字字符
SELECT regexp_substr('1PSN/231_3253/ABc', '[[:alnum:]]+', 1, 2) FROM dual;
Output: 231
与上面一个例子相比,多了两个参数
1 表示从源字符串的第一个字符开始查找匹配
2 表示第2次匹配到的字符串(默认值是“1”,如上例)
|