2017-03-12 50 views
-1

我想對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]'); 
+0

您需要列定義和表約束之間的逗號。 – Goyo

回答

1

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)的調用而實現。

您將需要提供此功能才能在邏輯中使用它。

1

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]') 
); 

(請注意,您需要兩個結束括號,一個用於檢查,一個用於表的列的列表)。