我想對phoneNumber屬性設置一個約束,只允許有效的荷蘭電話號碼。此代碼以某種方式導致語法錯誤。它有什麼問題?如何在SQLite中設置電話號碼約束?
phoneNumber TEXT NOT NULL
CHECK(phoneNumber LIKE '06[1-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]');
我想對phoneNumber屬性設置一個約束,只允許有效的荷蘭電話號碼。此代碼以某種方式導致語法錯誤。它有什麼問題?如何在SQLite中設置電話號碼約束?
phoneNumber TEXT NOT NULL
CHECK(phoneNumber LIKE '06[1-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]');
SQLite中,你會用正則表達式,而不是LIKE
做到這一點:
CHECK (phoneNumber REGEXP '^06[1-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$');
我要強調的是,雖然SQLite的識別REGEXP
,但實際上並沒有implement the function:
REGEXP
運算符是用於regexp()
用戶 函數的特殊語法。否regexp()
用戶功能默認定義,因此使用REGEXP
運算符的 通常會導致錯誤消息。如果在運行時添加名爲「regexp」的應用程序定義的SQL函數 ,則X REGEXP Y
運算符將作爲對regexp(Y,X)
的調用而實現。
您將需要提供此功能才能在邏輯中使用它。
LIKE不支持字符類。 SQLite中,你可以使用GLOB代替:
CREATE TABLE [...] (
[...],
phoneNumber TEXT NOT NULL
CHECK(phoneNumber GLOB '06[1-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')
);
(請注意,您需要兩個結束括號,一個用於檢查,一個用於表的列的列表)。
您需要列定義和表約束之間的逗號。 – Goyo