Oracle SQL中REGEXP_LIKE表达式含义及兼容所有VARCHAR2值的修改方法
Oracle SQL中REGEXP_LIKE表达式解析与修改
原表达式的含义
WHERE REGEXP_LIKE(firstname,'^[A-Za-z ,]+$') 是通过Oracle的正则匹配函数筛选记录,具体规则如下:
REGEXP_LIKE是Oracle用于校验字符串是否符合指定正则模式的函数- 正则部分的细节:
^和$分别锚定字符串的开头和结尾,确保整个字段值都要匹配规则,不能存在超出范围的额外字符[A-Za-z ,]限定了允许出现的字符:大小写英文字母、空格、逗号+表示前面的字符集至少要出现1次,也就是说firstname不能是空字符串
整体作用:只保留firstname字段值完全由大小写英文字母、空格、逗号组成,且不为空的记录。
修改为允许所有VARCHAR2值的方法
要允许所有VARCHAR2类型的值,分两种场景处理:
允许所有非NULL的VARCHAR2值(包括空字符串'')
最简单的方式是直接移除这个WHERE条件;如果一定要用REGEXP_LIKE,可以用匹配任意字符的正则:WHERE REGEXP_LIKE(firstname, '^.*$')这里
.*表示匹配0个或多个任意字符,结合^和$就能匹配所有非NULL的字符串(包括空字符串)。连NULL值也需要包含
因为REGEXP_LIKE对NULL值会返回NULL,不会被筛选出来,所以需要额外加上NULL的判断:WHERE REGEXP_LIKE(firstname, '^.*$') OR firstname IS NULL或者更直接的写法(如果没有其他筛选条件):
WHERE 1=1
内容的提问来源于stack exchange,提问作者Ciupaz
相关产品推荐
相关产品推荐

