2014-11-14 2 views
-1

Ищете запрос SQL в ORACLE, который возвращает количество всех специальных символов, используемых в определенном столбце. Предположим, что в столбце есть 5 строк и каждый использует два специальных символа. Я ищу некоторый запрос, который дает 10 в результате.Подсчет специальных символов в Oracle

Что я использовал:

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

, но это, кажется, не работает. Пробовал много по сети, но не повезло.

Update: ищет решение с 10г

ответ

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; 

Другой подход в 10 г, поскольку Персик предложил

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

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

Oracle представил REGEXP_COUNT() в 11g, поэтому это решение не будет работать в более ранних версиях, но это, несомненно, самый элегантный подход. – APC

+0

@ APC - Да, конечно. На самом деле я пытаюсь найти другое решение для работы в более ранних версиях, обновит ответ за несколько минут. – arunb2w

+0

Еще в 11g, как этот запрос может быть запущен. Мой запрос не работает вообще. – Saurabh

Смежные вопросы