获取 oracle 列中特殊字符的列表和次数

Get list of what special characters and how many times in oracle column

我正在寻找一种方法来获取特殊字符列表以及它们在我的专栏中出现的次数。我试过使用 using regexp_count ,但我不确定如何扩展它以使其适用于一个查询中的所有特殊字符。

例如语法 = 'x=y*100' 使用以下查询我得到

select *
  from (
         select regexp_count(syntax, '\*') as charCnt, syntax
           from tblTemp
       ) 
     where charCnt > 0

charCnt=1 和语法='x=y*100'。

哪个是正确的,但我希望能够回来

specChar Cnt

\*       1
=        1
etc..

Oracle 设置:

CREATE TABLE table_name(
  id INT,
  value NVARCHAR2(200)
);

INSERT INTO table_name
  SELECT 1, N'y=20x+3'          FROM DUAL UNION ALL
  SELECT 2, N'***^%$%$%*&*.&\?' FROM DUAL UNION ALL
  SELECT 3, UNISTR('[=10=]B5[=10=]B6[=10=]B5')  FROM DUAL UNION ALL
  SELECT 4, N'!"£$%^&*()!"£$%^&*()!"£$%^&*()!"£$%^&*()!"£$%^&*()'
            || N'!"£$%^&*()!"£$%^&*()!"£$%^&*()!"£$%^&*()!"£$%^&*()'
            || N'!"£$%^&*()!"£$%^&*()!"£$%^&*()!"£$%^&*()!"£$%^&*()'
            || N'!"£$%^&*()!"£$%^&*()!"£$%^&*()!"£$%^&*()!"£$%^&*()' FROM DUAL;

CREATE OR REPLACE TYPE CHAR_LIST IS TABLE OF CHAR(1 CHAR);
/

查询:

SELECT  t.id,
        --MAX( t.value ) AS value,
        CAST( c.COLUMN_VALUE AS CHAR(1 CHAR) ) AS character,
        COUNT(1) AS frequency
FROM    table_name t,
        TABLE(
          CAST(
            MULTISET(
              SELECT SUBSTR( t.value, LEVEL, 1 )
              FROM   DUAL
              WHERE  REGEXP_LIKE( SUBSTR( t.value, LEVEL, 1 ), '[^a-zA-Z0-9]' )
              CONNECT BY LEVEL <= LENGTH( t.value )
            ) AS CHAR_LIST
          )
        ) c
GROUP BY t.id, c.COLUMN_VALUE
ORDER BY id, character;

输出:

        ID CHARACTER  FREQUENCY
---------- --------- ----------
         1 +                  1 
         1 =                  1 
         2 $                  2 
         2 %                  3 
         2 &                  2 
         2 *                  5 
         2 .                  1 
         2 ?                  1 
         2 \                  1 
         2 ^                  1 
         3 µ                  2 
         3 ¶                  1 
         4 !                 20 
         4 "                 20 
         4 $                 20 
         4 %                 20 
         4 &                 20 
         4 (                 20 
         4 )                 20 
         4 *                 20 
         4 ^                 20 
         4 £                 20