2017-06-09 23 views
1

下午好,我正與包括輸入掩碼到我的SQL精簡版的代碼按以下掙扎 -SQL精簡版問題 - 檢查(<=現在')

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

不應該是'CHECK(Cust_DOB <= date('now'))'? – peterchen

+0

非常感謝! –

+0

@peterchen看起來像一個答案。尊重不需要聲望,但做一個好的Q/A對是一個有價值的目標,不是嗎? – Yunnosch

回答

0

CHECK約束應該是

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

參見sqlite documentation

每一個新行被插入到表中或現有行被更新時,與每個相關聯的表達式與CAST表達式相同,計算CHECK約束並轉換爲NUMERIC值。如果結果爲零(整數值0或實際值0.0),則發生約束違規。如果CHECK表達式的計算結果爲NULL或任何其他非零值,則不是違反約束條件。

在聲明中發生了什麼事是CAST('<= now' AS NUMERIC)計算結果爲0(你打算作爲表達實際上是一個字符串,不的東西,可以被解釋爲數字開頭)。