Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
aleks222
Guest |
Пардон, поправка к п.1 Низзя в одном declare присваивать и использовать присвоенное. |
3 дек 17, 06:10 [21001797] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |