下午好,我正在努力将输入掩码包含在我的SQL Lite代码中,如下所示 -
PRAGMA foreign_keys=on;
CREATE TABLE User
(Customer_ID INTEGER PRIMARY KEY AUTOINCREMENT,
Cust_Name vchar(50) NOT NULL,
Cust_Add vchar(100) NOT NULL,
Cust_Town vchar(50) NOT NULL,
Cust_PC vchar(7) NOT NULL,
Cust_DOB DateTime DEFAULT CURRENT_DATE CHECK ('<=now') NOT NULL,
Cust_Tel vchar(13) NOT NULL,
Cust_eMail vchar(50));
我试图让SQL数据库不允许DOB的条目大于或等于今天,但是当我尝试导入数据时,我得到一个错误约束。我无法看到我出错的地方? DOB的确是2017年,1985年。在撕开我的头发之前,我们将非常感谢任何帮助或建议。
答案 0 :(得分:0)
CHECK
约束应为
CHECK(Cust_DOB <= date('now'))
每次向表中插入新行或更新现有行时,将评估与每个CHECK约束关联的表达式,并以与CAST表达式相同的方式强制转换为NUMERIC值。如果结果为零(整数值0或实际值0.0),则发生约束违规。如果CHECK表达式的计算结果为NULL或任何其他非零值,则它不是约束违规。
你的语句中发生了什么CAST('<= now' AS NUMERIC)
的计算结果为0(你的表达式实际上是一个字符串,不能从可以解释为数字的东西开始)。