Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

TSQL валидиране на имейл (без регулярен израз)

Много основното би било:

SELECT
  EmailAddress, 
  CASE WHEN EmailAddress LIKE '%[email protected]_%_.__%' 
            AND EmailAddress NOT LIKE '%[any obviously invalid characters]%' 
  THEN 'Could be' 
  ELSE 'Nope' 
  END Validates
FROM 
  Table

Това съответства на всичко с @ в средата, предшестван от поне един знак, последван от поне два, точка и поне два за TLD.

Можете да напишете още LIKE модели, които правят по-конкретни неща, но никога няма да можете да съпоставите всичко, което може да бъде имейл адрес, като същевременно не позволявате да се промъкнете през неща, които не са. Дори с регулярни изрази ви е трудно да го направите правилно. Освен това, дори съвпадението според самите букви на RFC съвпада с адресни конструкции, които няма да бъдат приети/използвани от повечето системи за електронна поща.

Правенето на това на ниво база данни може би така или иначе е грешен подход, така че основната проверка на здравия разум, както е посочено по-горе, може да е най-доброто, което можете да получите по отношение на производителността, а правенето му в приложение ще ви осигури много по-голяма гъвкавост.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Защо функциите със скаларна стойност на SQL Server стават по-бавни?

  2. Как мога да изтрия с помощта на INNER JOIN със SQL Server?

  3. Кои са по-ефективни, CTE или временни таблици?

  4. Как да коригирате „Име на корелация трябва да бъде посочено за груповия набор от редове в клаузата from.“ в SQL Server

  5. Разлика между #temptable и ##TempTable?