SQL Lite问题 - 检查('< = now')

时间:2017-06-09 13:40:28

标签: sqlite

下午好,我正在努力将输入掩码包含在我的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年。在撕开我的头发之前,我们将非常感谢任何帮助或建议。

1 个答案:

答案 0 :(得分:0)

CHECK约束应为

CHECK(Cust_DOB <= date('now'))

请参阅sqlite documentation

  

每次向表中插入新行或更新现有行时,将评估与每个CHECK约束关联的表达式,并以与CAST表达式相同的方式强制转换为NUMERIC值。如果结果为零(整数值0或实际值0.0),则发生约束违规。如果CHECK表达式的计算结果为NULL或任何其他非零值,则它不是约束违规。

你的语句中发生了什么CAST('<= now' AS NUMERIC)的计算结果为0(你的表达式实际上是一个字符串,不能从可以解释为数字的东西开始)。