计算Oracle中的特殊字符

时间:2014-11-14 07:03:12

标签: sql oracle oracle10g

在ORACLE中查找SQL查询,该查询返回特定列中使用的所有特殊字符的计数。假设在一列中有5行,每行使用两个特殊字符。我正在寻找一些给出10作为结果的查询。

我使用的是:

SELECT * FROM Customers WHERE REGEXP_LIKE(Employees, '[^]^A-Z^a-z^0-9^[^.^{^}^ ]' );

但它似乎无法正常工作。 在网上尝试了很多,但没有运气。

更新:寻找10g的解决方案

1 个答案:

答案 0 :(得分:2)

这应该对你有用

with t as 
(
select 'ar{un' name from dual
union
select 'a#;>' from dual
)

select sum(regexp_count(name,'[^[:alnum:]]')) from t;

对于10g我们可以使用它,因为regexp_count()在早期版本中不可用

with t as 
(
select 'ar{un' name from dual
union 
select 'a;<#' from dual

)
select count(distinct regexp_substr(name,'[^[:alnum:]]',level,1)) from t
connect by level <= LENGTH(regexp_replace(name,'[[:alnum:]]')) + 1;

Peach建议的10g另一种方法

with t as 
(
select 'ar{}n' name from dual union
select 'a;<#'  from dual

)
select  sum(length(regexp_replace(name,'[[:alnum:]]'))) from t;