2017-03-12 10 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でこれを行うだろう:それSQLiteのはREGEXPを認識し、実際implement the functionませんが

CHECK (phoneNumber REGEXP '^06[1-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$'); 

は、私が強調しなければならない:

REGEXP演算子は、regexp()ユーザー 関数の特殊な構文です。 regexp()ユーザー関数がデフォルトで定義されているため、REGEXP演算子の を使用すると、通常はエラーメッセージが表示されます。実行時に という名前のアプリケーション定義のSQL関数 "regexp"が追加された場合、 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]') 
); 

(あなたは2つの閉じ括弧、CHECKのための1、および表の列リストのための1つを必要とすることに注意してください)。