Oracle查询含[A-X]_A格式子串的FIRST_NAME无数据问题求解
Oracle LIVE SQL 字符匹配无结果问题解决
问题根因
你使用的[]字符范围语法不属于Oracle原生LIKE运算符的支持范围。Oracle LIKE仅支持%(匹配0/多个任意字符)、_(匹配1个任意字符)两个通配符,你写的%[A-X]_A%会被系统识别为匹配包含字面量字符串[A-X]+任意单个字符+字母A的内容,自然返回无数据。
解决方案
方案1:使用Oracle正则匹配函数REGEXP_LIKE(推荐)
直接用正则匹配函数实现你的规则,查询语句如下:
SELECT FIRST_NAME FROM HR.EMPLOYEES WHERE REGEXP_LIKE(FIRST_NAME, '[A-X].A');
规则说明:
[A-X]匹配首位A到X范围内的大写字母.匹配中间任意单个字符A匹配第三位的A字符REGEXP_LIKE默认匹配字符串中任意位置的符合规则子串,不需要额外加前后通配符
如果需要兼容小写姓名,可添加第三个参数'i'关闭大小写敏感:
SELECT FIRST_NAME FROM HR.EMPLOYEES WHERE REGEXP_LIKE(FIRST_NAME, '[A-X].A', 'i');
方案2:原生语法实现(无正则依赖)
如果需要兼容不支持正则函数的旧Oracle版本,可通过字符截取和范围判断实现:
SELECT DISTINCT FIRST_NAME FROM HR.EMPLOYEES e WHERE EXISTS ( SELECT 1 FROM (SELECT LEVEL AS pos FROM DUAL CONNECT BY LEVEL <= LENGTH(e.FIRST_NAME) - 2) WHERE SUBSTR(e.FIRST_NAME, pos, 1) BETWEEN 'A' AND 'X' AND SUBSTR(e.FIRST_NAME, pos + 2, 1) = 'A' );
内容的提问来源于stack exchange,提问作者Brinless_Loco
相关产品推荐
相关产品推荐

