Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Отнять дату от даты  [new]
vas_ilisa
Member

Откуда:
Сообщений: 6
Здравствуйте. Не получается отнять дату от даты.

CREATE FUNCTION student.age(@code char(11))
RETURNS int AS
BEGIN
DECLARE
    @birthday date = student.birthday(@code),
    @today date = CAST(GETDATE() AS date),
    @age int = CAST(DATEDIFF(year, @today, @birthday) AS int)
	IF @today > @birthday
		RETURN @age
	ELSE
		RETURN @age - 1
END


Программа ругается на @age int = CAST(DATEDIFF(year, @today, @birthday) AS int)
Пишет ошибку Must declare the scalar variable
Не понимаю, что не так...
Заранее спасибо за любые советы.
3 дек 17, 00:38    [21001652]     Ответить | Цитировать Сообщить модератору
 Re: Отнять дату от даты  [new]
aleks222
Guest
1. Переменные надо называть одинаковыми буквами.
2. Выкиньте свой бред.
3. Учитесь у ia

-- Description:	Возраст человека с днем рождения @Birthday на дату @Date. Если @Date is null, то возраст вычисляется на текущий момент.
/*
  select * from [dbo].[Age]('20170101', '20160101')
*/
ALTER FUNCTION [dbo].[Age] 
(	
	@Birthday datetime, 
	@Date datetime = null
)
RETURNS TABLE 
AS
RETURN 
( with dt0 as ( select [@Date] = isnull( @Date, getdate() ) )
     , dt as ( select [@Date], YearDiff = datediff( year, @Birthday, dt0.[@Date] ) from dt0 )
	select  Age = YearDiff
                  + ( sign( datediff(day, @Birthday, dateadd(year, -dt.YearDiff, dt.[@Date] ) ) ) - 1 ) / 2
	  from dt
)
3 дек 17, 06:06    [21001796]     Ответить | Цитировать Сообщить модератору
 Re: Отнять дату от даты  [new]
aleks222
Guest
Пардон, поправка к п.1

Низзя в одном declare присваивать и использовать присвоенное.
3 дек 17, 06:10    [21001797]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить