如何在sqlite中对电话号码进行约束



我想对属性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]')
);

(请注意,您需要两个闭合括号,一个用于检查,一个用于表的列列表。

最新更新