Oracle SQL统计含a/A、e/E的字符串数量及ORA-00907错误解决
Oracle SQL 统计含指定字符的记录数解决方案
原SQL语句报错ORA-00907: missing right parenthesis的核心原因是:COUNT()函数无法直接处理LIKE返回的布尔值,Oracle解析时因语法逻辑错误误判为括号缺失。
以下是符合要求的单查询实现方式(无嵌套子查询):
方法一:CASE表达式配合LIKE
SELECT COUNT(CASE WHEN LOWER(nazwisko) LIKE '%a%' THEN 1 END) AS "Ile nazwisk z A", COUNT(CASE WHEN LOWER(nazwisko) LIKE '%e%' THEN 1 END) AS "Ile nazwisk z E" FROM pracownicy;
逻辑说明:当记录符合条件时,CASE返回1,否则返回NULL;COUNT()会自动忽略NULL值,最终统计的就是符合条件的记录总数。
方法二:INSTR函数(性能更优)
SELECT COUNT(CASE WHEN INSTR(LOWER(nazwisko), 'a') > 0 THEN 1 END) AS "Ile nazwisk z A", COUNT(CASE WHEN INSTR(LOWER(nazwisko), 'e') > 0 THEN 1 END) AS "Ile nazwisk z E" FROM pracownicy;
逻辑说明:INSTR()函数返回指定字符在字符串中的位置,若结果大于0则表示存在该字符,后续统计逻辑同方法一。
方法三:REGEXP_LIKE(写法更简洁)
SELECT COUNT(CASE WHEN REGEXP_LIKE(nazwisko, 'a', 'i') THEN 1 END) AS "Ile nazwisk z A", COUNT(CASE WHEN REGEXP_LIKE(nazwisko, 'e', 'i') THEN 1 END) AS "Ile nazwisk z E" FROM pracownicy;
逻辑说明:REGEXP_LIKE的第三个参数'i'表示不区分大小写,无需额外转换字符串大小写,直接匹配含a/A或e/E的记录。
内容的提问来源于stack exchange,提问作者Yas Nas
相关产品推荐
相关产品推荐

