--scenario
I am writing a scalar function.
alter function dbo.age
(
@name varchar(100)
)
returns varchar(100)
as
begin
declare
@year int,
@month int,
@days varchar(50),
@dob datetime,
@finalyear datetime,
@dayleftyear varchar(50),
@finalday varchar(40),
@FINAL VARCHAR(100)
set @FINAL='';
select @dob=dob from dateofbirth where name=@name
select @year=datediff(year,@dob,getdate())
if (month(getdate()) < month(@dob))
begin
set @year=@year-1;
end
set @finalyear=dateadd(year,@year,@dob)
select @month=datediff(month,@finalyear,getdate())
if(day(@finalyear)>(day(getdate())))
begin
set @month=@month-1;
end
select @dayleftyear=dateadd(month,@month,@finalyear)
select @finalday=datediff(day,@dayleftyear,getdate())
set @FINAL=cast(@year as varchar(23)) + ' YEARS ' + cast(@month as varchar(50)) + ' MONTH ' + ' AND ' + @finalday + ' DAYS OLD'
return @FINAL;
end
--When i am executing the scalar function i am getting the result
1 row affected.
--------------------------------------------
But when i run the query this works
select name,dbo.age(name)as age from dateofbirth
name dob age
anurag 1989-04-28 00:00:00.000 24 YEARS 8 MONTH AND 17 DAYS OLD
kishore 1980-12-25 00:00:00.000 33 YEARS 0 MONTH AND 20 DAYS OLD
ruchi 1989-11-15 00:00:00.000 24 YEARS 1 MONTH AND 30 DAYS OLD
abhi 1991-01-14 00:00:00.000 23 YEARS 0 MONTH AND 0 DAYS OLD
------------------------------------------------
doubt : why i am getting in scalar function
1 row affected insted of the result
when i pass the name as below
SELECT dbo.age('anurag') as finalyear
--this should give me o/p :: 24 YEARS 8 MONTH AND 17 DAYS OLD
but i am getting ::1 row affected
Kindly help where I am doing wrong