多重正则表达式oracle如何计算结果

时间:2018-01-22 16:06:34

标签: sql oracle regexp-like

我必须做一个regexp_like并列出超过130种不同的支票。

目前我正在获得表格中匹配的所有字段。

但是在结果表中我只想要一个搜索列表和旁边的计数。

以下是

SELECT *
FROM company
WHERE REGEXP_LIKE (company_name, '(*)A. en P.$')
or REGEXP_LIKE (company_name, '(*)A.C.$')
or REGEXP_LIKE (company_name, '(*)GmbH$')
or REGEXP_LIKE (company_name, '(*)A/S$')

我希望看到的结果是

LegalExpression |计数

这些只有4个表达式,我有130个搜索

2 个答案:

答案 0 :(得分:1)

您可以使用UNION ALL

SELECT '()A. en P.$' as reg, COUNT(*) AS cnt
FROM company 
WHERE REGEXP_LIKE (company_name, '()A. en P.$')
UNION ALL 
SELECT '()A.C.$' as reg, COUNT(*) AS cnt
FROM company 
WHERE REGEXP_LIKE (company_name, '()A.C.$') 
...

另一种方式:

WITH cte(reg) AS (
   SELECT '()A. en P.$' FROM dual UNION ALL
   SELECT '()A.C.$' FROM dual
   -- ...
)
SELECT cte.reg, COUNT(c.company_name) AS cnt
FROM company c
RIGHT JOIN cte
  ON  REGEXP_LIKE (c.company_name, cte.reg)
GROUP BY cte.reg
;

答案 1 :(得分:0)

如果您希望公司只计算一个正则表达式,您可以执行以下操作:

select (case when REGEXP_LIKE(company_name, '(*)A. en P.$') then '(*)A. en P.$'
             when REGEXP_LIKE(company_name, '(*)A.C.$') then '(*)A.C.$'
             when REGEXP_LIKE(company_name, '(*)GmbH$') then '(*)GmbH$'
             when REGEXP_LIKE(company_name, '(*)A/S$') then '(*)A/S$'
        end), count(*)
from company
group by (case when REGEXP_LIKE(company_name, '(*)A. en P.$') then '(*)A. en P.$'
               when REGEXP_LIKE(company_name, '(*)A.C.$') then '(*)A.C.$'
               when REGEXP_LIKE(company_name, '(*)GmbH$') then '(*)GmbH$'
               when REGEXP_LIKE(company_name, '(*)A/S$') then '(*)A/S$'
        end);

如果你想为每场比赛计算公司数,那么这是一种方式:

with patterns(pattern) as (
      select '(*)A. en P.$' from dual union all
      select '(*)A.C.$' from dual union all
      select '(*)GmbH$' from dual union all
      select '(*)A/S$' from dual
     )
select p.pattern, count(*)
from company c join
     patterns p
     on regexp_like(c.company_name, p.pattern)
group by p.pattern;

关于你的模式的一些注释:

  • 我不确定(*)是什么。你不需要任何东西,因为正则表达式在字符串中找到模式;他们不会从字符串的开头开始。
  • .是正则表达式中的一个特殊字符,基本上是任何单个字符。