Possinator (9/12/2012)
Lowell (9/12/2012)
personally, since you have integers, i'd stick with using the dATEADD() functions:
/*
2012-02-01 00:00:00.000
2012-03-01 00:00:00.000
2012-04-01 00:00:00.000
*/
CREATE TABLE PS_TestForOnline
(
DAY_ INT,
MONTH_ INT,
YEAR_ INT
);
INSERT INTO PS_TestForOnline
VALUES(1,1,2012);
INSERT INTO PS_TestForOnline
VALUES(1,2,2012);
INSERT INTO PS_TestForOnline
VALUES(1,3,2012);
SELECT DATEADD(dd,DAY_ -1,
DATEADD(mm,MONTH_ -1,
DATEADD(yy,(YEAR_ - 1900) ,0))),
* FROM PS_TestForOnline
Hi Lowell - yours is adding 1 to the month and day since the year is already 01-01:
(No column name)DAY_MONTH_YEAR_
2012-02-02 00:00:00.000112012
2012-03-02 00:00:00.000122012
2012-04-02 00:00:00.000132012
You could subtract the extract day:
SELECT DATEADD(dd,DAY_ - 1, DATEADD(mm,MONTH_ - 1, DATEADD(yy,(YEAR_ - 1900) ,0)))
FROM #PS_TestForOnline
or use a string concat:
select cast(convert (char(4), p.YEAR_) + '-' + convert(char(2), p.MONTH_) + '-' + convert(char(2),p.DAY_) as date)
from PS_TestForOnline p
Actually, it isn't. Take a closer look, it is actually subtracting 1 for the day or month entered in the table.