需求:
客户要求模糊查询时不带括号仍可查询
数据:('测试(2020)1019 ')末尾带两个空格
输入条件为 测试20201019或者20201019(不带空格)
select *
from T_TEST
--where REGEXP_REPLACE(trim(C_XM), '\(|\)', '',1,0,'i')
--like REGEXP_REPLACE('测试20201019', '\(|\)', '',1,0,'i')
where REGEXP_REPLACE(trim(C_XM), '\(|\)', '')
like REGEXP_REPLACE('测试20201019', '\(|\)', '')
结果:
regexp_replace函数,一共有6个参数,前三个必填
1.需要替换的数据,也可以是数据库的某一列
2.正则表表达式(用来匹配需要替换和部分)
3.替换结果
4.开始位置,不填默认是1
5.替换方式 0代表全部替换,正数代表替换第n个匹配的子串
6.匹配方式
‘i’不区分大小写
‘c’区分大小写
上面两种比较常用,下面的是搜的还没用过
‘n’允许‘.’(句点,配置任意字符)匹配换行符,如果省略此此参数,则句点与换行符不匹配
‘m’将源字符串视为多行。Oracle将源字符串中的^或$视为行首或行尾,如果省略此参数,Oracle将源字符串视为单行
‘x’忽略空格字符。默认情况下,空白字符与自身匹配。
以前并没有注意,其实oracle中的大部分函数不仅可以用于参数,也可以用于字段,用来忽略数据中的某些条件