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

Откуда:
Сообщений: 6
Создать процедуру:
Вывести полный возраст: Если человеку меньше года, вывести сколько месяцев, иначе сколько лет

Помогите написать процедуру.

Ссылки на другие темы не нужно кидать, уже все пролистал и ничего не помогло.
16 июн 15, 13:15    [17776114]     Ответить | Цитировать Сообщить модератору
 Re: Вывести полный возраст  [new]
Glory
Member

Откуда:
Сообщений: 104751
a1exnet
Помогите написать процедуру.

Типа как помочь, если "Ссылки на другие темы не нужно кидать, уже все пролистал и ничего не помогло." ?
Написать весь код за вас ?
16 июн 15, 13:16    [17776128]     Ответить | Цитировать Сообщить модератору
 Re: Вывести полный возраст  [new]
a1exnet
Member

Откуда:
Сообщений: 6
Glory,
Согласен, было бы неплохо представить свой код,
но смысла нет кидать свой код, он вовсе нерабочий (функция datedif выводит только либо годы, либо месяцы, мне нужно вывести и то, и то, взависимости от возраста человека):

create function [dbo].vzrst
(@birthday datetime)
returns int
as
begin
return (datediff(year, @birthday, @CURDATE()) -
case
when month(@birthday) < month(@CURDATE())
then 0
when month(@birthday) > month(@CURDATE())
then 1
when day(@birthday) > day(@CURDATE())
then 1
else 0
end)
end
16 июн 15, 13:19    [17776154]     Ответить | Цитировать Сообщить модератору
 Re: Вывести полный возраст  [new]
a1exnet
Member

Откуда:
Сообщений: 6
Glory, поможешь написать?
16 июн 15, 13:20    [17776160]     Ответить | Цитировать Сообщить модератору
 Re: Вывести полный возраст  [new]
Glory
Member

Откуда:
Сообщений: 104751
a1exnet
Согласен, было бы неплохо представить свой код,

В десятке тем уже есть код

a1exnet
(функция datedif выводит только либо годы, либо месяцы, мне нужно вывести и то, и то, взависимости от возраста человека):

А соеденить результаты нескольких datediff с разеными параметрами это уже сверхусилия ?

a1exnet
поможешь написать?

Ваша цена ?
16 июн 15, 13:22    [17776188]     Ответить | Цитировать Сообщить модератору
 Re: Вывести полный возраст  [new]
a1exnet
Member

Откуда:
Сообщений: 6
Glory
А соеденить результаты нескольких datediff с разеными параметрами это уже сверхусилия ?


Можешь подробнее объяснить как это делается?
16 июн 15, 13:24    [17776205]     Ответить | Цитировать Сообщить модератору
 Re: Вывести полный возраст  [new]
Glory
Member

Откуда:
Сообщений: 104751
a1exnet
Можешь подробнее объяснить как это делается?

Вы спрашиваете, как соеденить несколько символьных строк в одну ?
16 июн 15, 13:26    [17776219]     Ответить | Цитировать Сообщить модератору
 Re: Вывести полный возраст  [new]
a1exnet
Member

Откуда:
Сообщений: 6
Glory, можешь подсказать, в чем проблема?

DECLARE @BirthDay DATE='8 JAN 2015', @vozr1 int, @vozr2 int
SET @vozr1 = datediff( yy, @BirthDay, getdate() )
SET @vozr2 = datediff( mm, @BirthDay, getdate() )
SELECT 
	CASE WHEN @BirthDay < getdate() THEN @vozr1
		 ELSE @vozr2
	END
	AS Возраст


Но постоянно выводит по первому условию, то есть 0 лет.
16 июн 15, 13:46    [17776387]     Ответить | Цитировать Сообщить модератору
 Re: Вывести полный возраст  [new]
Glory
Member

Откуда:
Сообщений: 104751
a1exnet
Но постоянно выводит по первому условию, то есть 0 лет.

Потому что разница в годах между 8 JAN 2015 и 16 JUN 2015 есть 0 лет
16 июн 15, 13:50    [17776427]     Ответить | Цитировать Сообщить модератору
 Re: Вывести полный возраст  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21053
a1exnet
	CASE WHEN @BirthDay < getdate() THEN @vozr1
		 ELSE @vozr2
	END

Если уже родился, то @vozr1, а если ещё нет, то @vozr2... трындецЪ...
16 июн 15, 13:50    [17776429]     Ответить | Цитировать Сообщить модератору
 Re: Вывести полный возраст  [new]
a1exnet
Member

Откуда:
Сообщений: 6
Glory, дело в том, что если меньше года, то уже в месяцах должно выводить, а не в годах
16 июн 15, 13:55    [17776468]     Ответить | Цитировать Сообщить модератору
 Re: Вывести полный возраст  [new]
Glory
Member

Откуда:
Сообщений: 104751
a1exnet
Glory, дело в том, что если меньше года, то уже в месяцах должно выводить, а не в годах

Это с чего вдруг. Потому что 8 JAN 2015 вдруг должно стать больше, чем 16 JUN 2015, при сравнении в CASE ?
16 июн 15, 13:56    [17776480]     Ответить | Цитировать Сообщить модератору
 Re: Вывести полный возраст  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21053
CASE DATEDIFF(YEAR, @BirthDay, getdate())
WHEN 0 THEN DATEDIFF(MONTH, @BirthDay, getdate())
       ELSE DATEDIFF(YEAR, @BirthDay, getdate())
END
16 июн 15, 14:21    [17776672]     Ответить | Цитировать Сообщить модератору
 Re: Вывести полный возраст  [new]
iap
Member

Откуда: Москва
Сообщений: 47063
Определение возраста по дате рождения и тек.дате
Как быстро определить сколько лет человеку по дате рождения

Это только мои поделки. А можно и ещё по форуму поискать...
16 июн 15, 14:24    [17776695]     Ответить | Цитировать Сообщить модератору
 Re: Вывести полный возраст  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4422
a1exnet
Glory, дело в том, что если меньше года, то уже в месяцах должно выводить, а не в годах

Т.е. поле, которое измерялось в годах, вдруг начинает показывать в месяцах,
Как вы тогда сможете понять какой возраст - 9 месяцев или 9 лет?
Определитесь, как будете отображать значения.
Вариант - подставлять после значения "г." или "м."
16 июн 15, 14:26    [17776705]     Ответить | Цитировать Сообщить модератору
 Re: Вывести полный возраст  [new]
iap
Member

Откуда: Москва
Сообщений: 47063
Фактически, если день рождения в текущем году уже был,
надо определить, сколько с него прошло месяцев, дней, часов, минут, секунд, миллисекунд и т.д.,
и приписать слева сколько лет прошло с рождения до дня рождения в этом году.

Если день рождения в этом году ещё только будет, определить, сколько месяцев и т.п. прошло со дня рождения прошлого года, и сколько лет исполнилось в прошлом году.

На первый взгляд всё тривиально.
16 июн 15, 14:33    [17776758]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить