Мне нужно посчитать количество адресов электронной почты в БД, которые имеют 3 или менее символов перед знаком @, например ab@test.com.
Функция парсения отсутствует в Oracle иЯ не уверен, как написать регулярное выражение для этого.Любая помощь будет принята с благодарностью!
Regex излишне для этого.Все, что вам нужно, это
instr(t.email, '@') < 5 AND instr(t.email, '@') > 0
Отредактировано с исправлением из комментариев.
Вы можете определить предложение WHERE и использовать COUNT или пропустить, чтобы использовать вместо него REGEXP_COUNT:
SELECT REGEXP_COUNT(t.email, '^[^@]{0,3}@', 1, 'i') RESULT FROM TABLE t;
Использование COUNT:
SELECT COUNT(*) FROM TABLE t WHERE REGEXP_LIKE(t.email, '^[^@]{0,3}@')
Справка:
Требуемое регулярное выражение:
^[^@]{0,3}@
На английском это:
Есть небольшая проблема со следующим instr (t.email, '@') <5 </p>
, этот запрос будет работать при условии, что t.email имеет '@'!в противном случае он также вернет те записи, где t.email не имеет '@'