- :
CREATE Table PartialDates
(
YearPart smallint
,MonthPart tinyint
,DayPart tinyint
,CompleteDate AS (CONVERT(datetime,CONVERT(varchar(10),YearPart)+'-'+CONVERT(varchar(10),MonthPart)+'-'+CONVERT(varchar(10),coalesce(DayPart,1))))
)
ALTER TABLE dbo.PartialDates ADD CONSTRAINT
CK_PartialDates_IsDate CHECK (ISDATE(CONVERT(varchar(10),YearPart)+'-'+CONVERT(varchar(10),MonthPart)+'-'+CONVERT(varchar(10),coalesce(DayPart,1)))=1)
GO
insert into PartialDates (yearpart,monthpart,daypart) values(2009,91,1)
insert into PartialDates (yearpart,monthpart,daypart) values(2009,1,1)
insert into PartialDates (yearpart,monthpart,daypart) values(2009,1,51)
insert into PartialDates (yearpart,monthpart,daypart) values(2009,2,29)
insert into PartialDates (yearpart,monthpart,daypart) values(2009,2,28)
insert into PartialDates (yearpart,monthpart,daypart) values(2009,2,null)
select * from PartialDates
YearPart MonthPart DayPart CompleteDate
2009 1 1 2009-01-01 00:00:00.000
2009 2 28 2009-02-28 00:00:00.000
2009 2 NULL 2009-02-01 00:00:00.000
(3 row(s) affected