Click here to Skip to main content
16,013,440 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 declare the return type of your function:
SQL
create function Age(@date datetime)
RETURNS VARCHAR(12)
as
 
Share this answer
 
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)

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