Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Validierung von E-Mail-/Postleitzahlenfeldern in SQL/Oracle

Hier ist die Regexp-Syntax für eine E-Mail-Adresse, einschließlich Anführungszeichen

'[a-zA-Z0-9._%-][email protected][a-zA-Z0-9._%-]+\.[a-zA-Z]{2,4}'

Sie können also regexp_like() in einer where-Klausel oder regexp_substr() verwenden, um zu prüfen, ob Ihr Feld eine gültige E-Mail-Adresse enthält. Hier ist ein Beispiel – Sie werden sehen, dass regexp_substr() NULL für die Adresse zurückgibt, der die .domain fehlt, wodurch die Teilstring-Validierung fehlschlägt. Von dort aus können Sie eine Check-Einschränkung darum herum erstellen oder sie mit einem Trigger (igitt) usw. erzwingen.

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

Unter Verwendung der gleichen Daten ist hier eine Abfrage, die nur gültige E-Mail-Adressen mit REGEXP_LIKE

einschränkt
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]

Durchsuchen Sie die Inhaltsseite der SQL-Referenz für regexp, um die Unterstützung für reguläre Ausdrücke zu sehen.