Вот синтаксис регулярного выражения для адреса электронной почты, включая кавычки
'[a-zA-Z0-9._%-]+@[a-zA-Z0-9._%-]+\.[a-zA-Z]{2,4}'
Таким образом, вы можете использовать regexp_like () в предложении where или regexp_substr (), чтобы проверить, содержит ли ваше поле действительный адрес электронной почты. Вот пример - вы увидите, что regexp_substr () возвращает NULL по адресу, пропущенному .domain, что не проходит проверку подстроки. Оттуда вы можете создать проверочное ограничение вокруг него или применить его с помощью триггера (фу) и т. Д.
SQL> desc email
Name Null? Type
----------------------------------------- -------- ----------------------------
EMAIL_ID NUMBER
EMAIL_ADDRESS VARCHAR2(128)
SQL> select * from email;
EMAIL_ID EMAIL_ADDRESS
---------- ----------------------------------------
1 NEIL@GMAIL.COM
2 JOE@UTAH.GOV
3 lower_name@lower.org
4 bad_address@missing_domaindotorg
SQL> @qry2
SQL> column email_address format a40
SQL> column substr_result format a30
SQL> SELECT email_address
2 , regexp_substr(email_address,'[a-zA-Z0-9._%-]+@[a-zA-Z0-9._%-]+\.[a-zA-Z]{2,4}') substr_result
3 FROM email
4 /
EMAIL_ADDRESS SUBSTR_RESULT
---------------------------------------- ------------------------------
NEIL@GMAIL.COM NEIL@GMAIL.COM
JOE@UTAH.GOV JOE@UTAH.GOV
lower_name@lower.org lower_name@lower.org
bad_address@missing_domaindotorg
Используя те же данные, вот запрос, который ограничивает только действительные адреса электронной почты, используя REGEXP_LIKE
SQL> column email_address format a40
SQL> column substr_result format a30
SQL> SELECT email_address
2 FROM email
3 WHERE REGEXP_LIKE (email_address, '[a-zA-Z0-9._%-]+@[a-zA-Z0-9._%-]+\.[a-zA-Z]{2,4}');
EMAIL_ADDRESS
----------------------------------------
NEIL@GMAIL.COM
JOE@UTAH.GOV
lower_name@lower.org
Найдите регулярное выражение на странице содержимого Справочника SQL , чтобы увидеть поддержку регулярных выражений.