Oracle:一个查询,用于计算字符串中所有非字母数字字符的出现次数

Moz*_*Moz 3 regex sql oracle alphanumeric

计算出现在Oracle数据库列中的字符串中的所有非字母数字字符的出现的最佳方法是什么.

在尝试找到解决方案时,我意识到我有一个与问题无关的查询,但我注意到我可以修改它以希望解决这个问题.我想出了这个:

SELECT  COUNT (*), SUBSTR(TITLE, REGEXP_INSTR(UPPER(TITLE), '[^A-Z,^0-9]'), 1)
FROM    TABLE_NAME
WHERE   REGEXP_LIKE(UPPER(TITLE), '[^A-Z,^0-9]')
GROUP BY    SUBSTR(TITLE, REGEXP_INSTR(UPPER(TITLE), '[^A-Z,^0-9]'), 1)
ORDER BY COUNT(*) DESC;
Run Code Online (Sandbox Code Playgroud)

这可以找到FIRST非字母数字字符,但我想计算整个字符串中的出现次数,而不仅仅是第一次出现的次数.E. g.目前我的查询分析"a(字符串)"将找到一个开括号,但我需要它找到一个左括号和一个闭括号.

IK.*_*IK. 5

有一个模糊的Oracle TRANSLATE函数可以让你这样做而不是regexp:

select a.*,
       length(translate(lower(title),'.0123456789abcdefghijklmnopqrstuvwxyz','.')) 
from table_name a
Run Code Online (Sandbox Code Playgroud)