2016-11-19 194 views
0

如何在創建表時對age < 40 from birthdate設置檢查約束? 喜歡的東西:從出生日期開始sql check約束的年齡

SELECT DATEDIFF(yy,」 Birthdate 」, getdate()) as age 
age<40 

然後,我怎麼可能有另一個檢查約束創建表時計數的屬性,它的分組和檢查,如果是「6?

如下面但作爲檢查約束?創建表時

select count(attributex) as counter from entityx 
group by attributex 
having counter>6 
+2

我刪除了不兼容的數據庫標記。你有MySQL和Oracle,但代碼是SQL Server。 –

回答

0
create table person (Birthdate date check (DATEDIFF(year,Birthdate,getdate()) < 40)) 

insert into person (Birthdate) values ('1990-01-01'); 

(1行(一個或多個)受影響)

insert into person (Birthdate) values ('1970-01-01'); 

Msg 547,級別16,狀態0,行7
INSERT語句與CHECK約束「CK__person__Birthdat__30F848ED」衝突。衝突發生在數據庫「dmarkovitz」,表「dbo.person」,「出生日期」列中。

0

檢查約束: http://www.w3schools.com/sql/sql_check.asp

而對於第二個問題,我想你想提出一個檢查約束這將限制插入類似條件的行數(年齡> 6和年齡< 40)。爲此,它更有意義檢查最大限制而不是最小限定如下例所示:

CREATE TABLE EnitityX 
(
Age int NOT NULL, 
RecordId int NOT NULL AUTO_INCREMENT, 
CHECK (Age>6), 
CHECK (Age<40), 
CHECK (RecordId<6) 
) 
+0

感謝您的幫助,但我必須計算年齡作爲派生attirubute,我只是生日不年齡,所以我認爲@杜杜馬爾科維茨的答案將解決我的問題。 – novice