不使用LIKE查询姓名含第二个A的员工及REGEXP_COUNT报错问题
SQL问题解答
- 你编写的SQL不能正常运行,存在两处问题:
- 函数兼容性问题:
REGEXP_COUNT是Oracle 11g及以上版本才支持的专属函数,如果你使用低版本Oracle、MySQL、SQL Server等其他数据库,系统会识别不到该函数,直接触发regexp_count : invalid identifier报错。 - 查询逻辑错误:你写的过滤条件
REGEXP_COUNT(column_name, 'A')>2的含义是筛选姓名中A出现次数超过2次(即至少3次)的记录,和你需要的「姓名中A至少出现2次(存在第二次出现的A)」的需求不符,就算数据库支持该函数,查询结果也不符合预期。
- 函数兼容性问题:
- 如果你使用支持
REGEXP_COUNT的高版本Oracle,修正后的正确语句如下:SELECT * FROM table_name WHERE REGEXP_COUNT(column_name, 'A') >= 2; - 如果你使用的数据库不支持
REGEXP_COUNT,可以用通用字符串函数实现需求,不需要用到LIKE运算符,所有主流数据库均兼容:
语句中SELECT * FROM table_name WHERE INSTR(column_name, 'A', 1, 2) > 0;INSTR函数的作用是返回指定字符第N次出现在字符串中的位置,返回值为0就代表不存在,上述语句的逻辑就是查找A第二次出现的位置大于0,也就是存在第二次出现的A,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者swetha pokala
相关产品推荐
相关产品推荐

