| CREATE procedure nimi …. | CREATE function nimi return …. |
| teeb mitu tegevust korraga | tagastab väärtused |
| -kutse EXEC nimi; EXECUTE nimi; | -kutse select veerunimi, funktsiooninimi FROM tabelinimi |
| INPUT, OUTPUT | INPUT |
| Protseduur = teeb tegevusi (muudab andmeid, käivitab mitmeid käske, ei pea väärtust tagastama) | Funktsioon = arvutab ja tagastab midagi (väärtuse või tabeli; saab kasutada SELECT-is). |
create function fnComputeAge(@DOB datetime)
returns nvarchar(50)
as begin
declare @tempdate datetime, @years int, @months int, @days int
select @tempdate = @DOB
select @years = datediff(year, @tempdate, getdate()) - case when (month(@DOB) > month(GETDATE())) or (MONTH(@DOB)
= month (getdate()) and day(@DOB) > DAY(getdate())) then 1 else 0 end
select @tempdate = dateadd(year, @years, @tempdate)
select @months = datediff(month, @tempdate, getdate()) - case when day(@DOB) > day(getdate()) then 1 else 0 end
select @tempdate = dateadd(MONTH, @months, @tempdate)
select @days = datediff(day, @tempdate, getdate())
declare @Age nvarchar(50)
set @Age = cast(@years as nvarchar(4)) + ' Years ' + cast(@months as nvarchar(2)) +
' Months ' + cast(@days as nvarchar(2)) + ' Days old'
return @Age
end

--- saame vaadata kasutajate vanust
select Id, Name, DateOfBirth, dbo.fnComputeAge(DateOfBirth)
as Age from EmployeesWithDates

create function dbo.CalculateAge(@DOB date)
returns int
as begin
declare @Age int
set @Age = DATEDIFF(YEAR, @DOB, GETDATE()) -
case
when (MONTH(@DOB) > MONTH(getdate())) or
(MONTH(@DOB) > MONTH(GETDATE()) and DAY(@DOB) > day(GETDATE()))
then 1
else 0
end
return @Age
end

create function fn_EmployeesByGender(@Gender nvarchar(10))
returns table
as
return (select Id, Name, DateOfBirth, DepartmentId, Gender
from EmployeesWithDates
where Gender = @Gender)
