Oracle的regexp_replace缺省替换字符串是否等价于传NULL参数
结论
这两种写法在所有支持REGEXP_REPLACE函数的Oracle版本(10g及更高)中完全等效。
原理说明
Oracle官方对REGEXP_REPLACE函数的定义语法如下:
REGEXP_REPLACE(source_char, pattern [, replace_string [, position [, occurrence [, match_param ] ] ] ])
- 第三个参数
replace_string为可选参数,默认值就是NULL - 当
replace_string为NULL时,Oracle的行为是删除所有匹配到的pattern内容,和省略该参数的默认行为完全一致
验证示例
你可以通过以下简单测试验证行为一致:
-- 省略第三个参数,删除字符串中所有数字 SELECT REGEXP_REPLACE('test123test456', '\d') AS result1 FROM DUAL; -- 显式传入NULL作为第三个参数 SELECT REGEXP_REPLACE('test123test456', '\d', NULL) AS result2 FROM DUAL;
两个查询的返回结果都是testtest,完全一致。
补充注意点
只有当你需要指定匹配起始位置、匹配次数、匹配规则等后续可选参数时,才必须显式写出第三个参数,哪怕你需要的取值就是NULL,比如要从第2个字符开始匹配、替换所有匹配项、忽略大小写,就需要写:
REGEXP_REPLACE(somecolumn, someregex, NULL, 2, 0, 'i')
内容的提问来源于stack exchange,提问作者Danny Julian
相关产品推荐
相关产品推荐

