我想对属性Phonenumber构成约束,以仅允许有效的荷兰电话号码。此代码在某种程度上导致语法错误。怎么了?
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
,但实际上并未实现该功能:
REGEXP
操作员是regexp()
用户的特殊语法 功能。默认情况下未定义regexp()
用户功能,因此请使用REGEXP
操作员通常会导致错误消息。如果 在运行时添加了应用程序定义的SQL函数,名为" Regexp", 然后,X REGEXP Y
操作员将作为调用regexp(Y,X)
。
您需要提供此功能才能在逻辑中使用它。
喜欢不支持字符类。在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]')
);
(请注意,您需要两个闭合括号,一个用于检查,一个用于表的列列表。