Sqlite

Sqlite - 使用檢查限制一個字元串的不同部分的字元

  • March 10, 2020

我必須確保任何插入的電子郵件都具有以下格式:“X@YZ”

X 和 Y 只能包含字母和數字,Z 只能包含字母。

我試過這樣的東西,但我不知道如何分別限制 X、Y 和 Z 的字元。

Create Table User(
Mail varchar check(Mail NOT GLOB '*[^A-Za-z0-9@.]*' AND Mail LIKE '%_@%_._%'));

所以我想出瞭如何做我想做的事。我使用了子字元串並限制了電子郵件每個單獨部分的字元。

CREATE TABLE User(
EMail varchar NOT NULL COLLATE NOCASE check( (substr(EMail, INSTR(EMail,'.')+1) NOT GLOB '*[^A-Za-z]*') 
AND (substr(EMail,1, INSTR(EMail,'@')-1) NOT GLOB '*[^A-Za-z0-9]*')
AND (substr(EMail, INSTR(EMail,'@')+1, ((INSTR(EMail,'.')-1) - (INSTR(EMail,'@')+1))+1 ) NOT GLOB '*[^A-Za-z0-9]*') 
AND EMAIL LIKE '%_@%_.%_')

引用自:https://dba.stackexchange.com/questions/259997