有効なオランダの電話番号だけを許可するために、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
でこれを行うだろう:それ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)
の呼び出しとして実装されます。
ロジックで使用するには、この機能を使用する必要があります。
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つを必要とすることに注意してください)。
カラム定義とテーブル制約の間にカンマが必要です。 – Goyo