Click here to Skip to main content
15,892,927 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
SQL
create function Age(@date datetime)
return
as
begin
	DECLARE  @tmpdate datetime, @years int, @months int, @days int, @age varchar(12)
--	declare @date datetime
--		set	@date='12/29/04'
	SELECT @tmpdate = @date
	SELECT @years = DATEDIFF(yy, @tmpdate, GETDATE()) - 
		CASE WHEN (MONTH(@date) > MONTH(GETDATE())) OR (MONTH(@date) = MONTH(GETDATE()) AND DAY(@date) > DAY(GETDATE())) THEN 1 ELSE 0 END

	SELECT @tmpdate = DATEADD(yy, @years, @tmpdate)

	SELECT @months = DATEDIFF(m, @tmpdate, GETDATE()) - 
		CASE WHEN DAY(@date) > DAY(GETDATE()) THEN 1 ELSE 0 END

	SELECT @tmpdate = DATEADD(m, @months, @tmpdate)
	SELECT @days = DATEDIFF(d, @tmpdate, GETDATE())
	set @age= Convert(varchar(12),(cast (@years as varchar(2)) + '-'+ cast(@months as varchar(2))+'-'+ cast(@days as varchar(4))),11) 
--	select @age
	return @age
end

I would like to create function which gives the output from the given date and compare it with today and give output date.
Posted
Updated 11-Dec-12 20:59pm
v2

you need to improve your query.
change your return statement like returns [datatype]

i changed it

SQL
create function Age(@date datetime)
returns datetime-- your problem was here
as
begin
DECLARE @tmpdate datetime, @years int, @months int, @days int, @age varchar(12)
--  declare @date datetime
--   set    @date='12/29/04'
SELECT @tmpdate = @date
SELECT @years = DATEDIFF(yy, @tmpdate, GETDATE()) -
CASE WHEN (MONTH(@date) > MONTH(GETDATE())) OR (MONTH(@date) = MONTH(GETDATE()) AND DAY(@date) > DAY(GETDATE())) THEN 1 ELSE 0 END

SELECT @tmpdate = DATEADD(yy, @years, @tmpdate)

SELECT @months = DATEDIFF(m, @tmpdate, GETDATE()) -
CASE WHEN DAY(@date) > DAY(GETDATE()) THEN 1 ELSE 0 END

SELECT @tmpdate = DATEADD(m, @months, @tmpdate)
SELECT @days = DATEDIFF(d, @tmpdate, GETDATE())
set @age= Convert(varchar(12),(cast (@years as varchar(2)) + '-'+ cast(@months as varchar(2))+'-'+ cast(@days as varchar(4))),11)
--  select @age
return @age
end
 
Share this answer
 
v2
Comments
Patel Shailendra 12-Dec-12 3:12am    
thanks for reply,
i am getting wrong output when i pass
select dbo.Age('12/29/04')
ouput
2013-07-11 00:00:00.000

desire result 7-13-11(YY-MM-DD)
You need to declare the return type of your function:
SQL
create function Age(@date datetime)
RETURNS VARCHAR(12)
as
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900