引用符を含むメールアドレスの正規表現構文は次のとおりです
'[a-zA-Z0-9._%-][email protected][a-zA-Z0-9._%-]+\.[a-zA-Z]{2,4}'
したがって、where句でregexp_like()を使用するか、regexp_substr()を使用して、フィールドに有効な電子メールアドレスが含まれているかどうかを確認できます。次に例を示します。regexp_substr()が.domainが欠落しているアドレスでNULLを返し、サブストリングの検証に失敗することがわかります。そこから、その周りにチェック制約を作成したり、トリガー(yuck)などを使用して強制したりできます。
SQL> desc email
Name Null? Type
----------------------------------------- -------- ----------------------------
EMAIL_ID NUMBER
EMAIL_ADDRESS VARCHAR2(128)
SQL> select * from email;
EMAIL_ID EMAIL_ADDRESS
---------- ----------------------------------------
1 [email protected]
2 [email protected]
3 [email protected]
4 [email protected]_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._%-][email protected][a-zA-Z0-9._%-]+\.[a-zA-Z]{2,4}') substr_result
3 FROM email
4 /
EMAIL_ADDRESS SUBSTR_RESULT
---------------------------------------- ------------------------------
[email protected] [email protected]
[email protected] [email protected]
[email protected] [email protected]
[email protected]_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._%-][email protected][a-zA-Z0-9._%-]+\.[a-zA-Z]{2,4}');
EMAIL_ADDRESS
----------------------------------------
[email protected]
[email protected]
[email protected]
SQLリファレンス> regexpが正規表現のサポートを確認するため。