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

Откуда: Москва-Воронеж
Сообщений: 22
Как быстро определить сколько лет человеку по дате рождения и текущей дате? Можно ли это определить без использования пользовательских функций?
30 июл 03, 12:12    [281290]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро определить сколько лет человеку по дате рождения  [new]
ale-805
Member

Откуда: Питер
Сообщений: 670
Так можно же у него спросить!
30 июл 03, 12:21    [281319]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро определить сколько лет человеку по дате рождения  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
DATEDIFF ( datepart , startdate , enddate )
30 июл 03, 12:23    [281326]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро определить сколько лет человеку по дате рождения  [new]
big-duke
Member

Откуда:
Сообщений: 6784
DATEDIFF
30 июл 03, 12:23    [281329]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро определить сколько лет человеку по дате рождения  [new]
moonmike
Member

Откуда: Москва
Сообщений: 430
2 tpg:
не совсем верно datediff вернет разницу между годом рождения и текущим годом к примеру:
declare @birthdate datetime 

declare @curdate datetime
set @birthdate = '08.27.1978'
set @curdate = GetDate()
select datediff(year, @birthdate, @curdate)

возвращает:
25 лет, хотя мне неполных 25. Так что там нужно еще порыться с месяцами и числами.
30 июл 03, 12:27    [281336]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро определить сколько лет человеку по дате рождения  [new]
remi_
Member

Откуда: СПб
Сообщений: 246
Надо по месяцам
declare @birthdate datetime
declare @curdate datetime
set @birthdate = '08.27.1978'
set @curdate = GetDate()
--select datediff(year, @birthdate, @curdate)
select datediff(month, @birthdate, @curdate)/12
30 июл 03, 12:33    [281357]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро определить сколько лет человеку по дате рождения  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Тогда уж по дням.
30 июл 03, 12:35    [281366]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро определить сколько лет человеку по дате рождения  [new]
moonmike
Member

Откуда: Москва
Сообщений: 430
2 Remi:
Это я тоже проверил=)))
declare @birthdate datetime 

declare @curdate datetime
set @birthdate = '07.31.1978'
set @curdate = GetDate()
select datediff(month, @birthdate, @curdate)/12

Выход - 25
хотя до 25 на текущий момент еще 1 день=)
Ну что до секунд спускаться будем?=)))
30 июл 03, 12:36    [281374]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро определить сколько лет человеку по дате рождения  [new]
moonmike
Member

Откуда: Москва
Сообщений: 430
2 tpg:
А сколько дней в году считать? 365 аль 364. Или еще определять високосность года?
Сдается мне решение в лоб не прокатит. Так что лучше всеже использовать UDF, так как для точного решения слишком много кода пхать придется и удобнее его просто в UDF завернуть. Хотя может человека и по годам устроит, большой ведь разницы нет, уже 25 или почти 25=)
30 июл 03, 12:39    [281380]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро определить сколько лет человеку по дате рождения  [new]
LAU
Guest
А может определить сколько лет между текущей датой и датой рождения,
а потом проверить если текущая дата больше дня рождения в этом году,то
все ок , если меньше то годик прийдется отнять от результата datediff :))
30 июл 03, 12:55    [281420]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро определить сколько лет человеку по дате рождения  [new]
Kilroy
Member

Откуда: Москва
Сообщений: 249
Лучше в цикле прибавлять год к дате рождения, а потом сравнивать с текущей датой. Счетчик цикла и будет возрастом
30 июл 03, 13:00    [281438]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро определить сколько лет человеку по дате рождения  [new]
Kilroy
Member

Откуда: Москва
Сообщений: 249
К примеру так

declare @birthdate datetime

declare @age int


set @birthdate = '1971.09.22'
set @age = 0


while @birthdate < getdate()
begin
set @birthdate = DATEADD( year , 1, @birthdate)
set @age = @age + 1
end

select @age
30 июл 03, 13:06    [281463]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро определить сколько лет человеку по дате рождения  [new]
ОператорПК
Guest
Это уже было, но что-то я не нашел...Примерно так:
set @i=@y2-@y1-case when (@m2<@m1 or (@m2=@m1 and @d2<@d1)) then 1 else 0 end
30 июл 03, 13:23    [281511]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро определить сколько лет человеку по дате рождения  [new]
bushmen
Member

Откуда: г. Москва
Сообщений: 828
Можно сначала DATEDIFF, а потом, если текущая дата меньше даты рождения, то год отнимаешь
30 июл 03, 14:20    [281637]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро определить сколько лет человеку по дате рождения  [new]
moonmike
Member

Откуда: Москва
Сообщений: 430

CREATE FUNCTION dbo.Vozrast (@birthdate datetime, @curdate datetime)
RETURNS int AS
BEGIN
declare @df int
set @df = datediff(year, @birthdate, @curdate)
declare @newdate datetime
set @newdate = dateadd(year, @df, @birthdate)
if(@newdate > @curdate)
begin
set @df = @df-1
end
return @df
END

Вот и все, передаем дату рождения и дату на которую хотим узнать возраст получаем количество полных лет.
30 июл 03, 14:47    [281702]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро определить сколько лет человеку по дате рождения  [new]
Gunduk
Member

Откуда: Москва-Воронеж
Сообщений: 22
Спасибо всем откликнувшимся на мой вопрос. Похоже без пользовательской функции действительно не обойтись. Хорошо что версия MS SQL не седьмая. :)
30 июл 03, 15:44    [281866]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро определить сколько лет человеку по дате рождения  [new]
Cornel Leu
Member

Откуда: Bucharest
Сообщений: 23
[code]select datename(yy,getdate()-'12/13/1976')-1900[/code]
30 июл 03, 17:46    [282253]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро определить сколько лет человеку по дате рождения  [new]
Cornel Leu
Member

Откуда: Bucharest
Сообщений: 23
select datename(yy,getdate()-'12/13/1976')-1900
30 июл 03, 17:49    [282259]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро определить сколько лет человеку по дате рождения  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 145741
https://www.sql.ru/forum/actualthread.aspx?bid=1&tid=14672

Тут, кроме всего прочего обсуждался и вопрос о количестве полных лет.
30 июл 03, 21:01    [282501]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро определить сколько лет человеку по дате рождения  [new]
Ilana
Guest
DECLARE @Birthday DATETIME
SELECT @Birthday = '7/30/2003'

IF YEAR(@Birthday) >= YEAR(GETDATE())
SELECT 0
ELSE
IF MONTH(@Birthday) = MONTH(GETDATE())
IF DAY(@Birthday) <= DAY(getdate())
SELECT (YEAR(GETDATE())) - (YEAR(@Birthday))
ELSE
SELECT (YEAR(GETDATE())) - (YEAR(@Birthday))-1
ELSE
SELECT (YEAR(GETDATE())) - (YEAR(@Birthday))
30 июл 03, 22:36    [282541]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро определить сколько лет человеку по дате рождения  [new]
Сергей Алексеев
Member

Откуда: Россия
Сообщений: 63
To Gunduk

А тебе точно нужно знать, сколько человеку полных лет, задача именно так стоит? Может быть будет достаточно проверить, исполнилось ли челу например 18 лет? тогда это можно сделать проще:

select * from peoples where dateadd(yy, 18, birth_date) > getdate()
31 июл 03, 10:45    [282886]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро определить сколько лет человеку по дате рождения  [new]
Gunduk
Member

Откуда: Москва-Воронеж
Сообщений: 22
То Сергей Алексеев

Определить возрастные границы надо тоже. Но это другая задача, спасибо за идею.

То Cat2
Спасибо за ссылку. Среди вариантов которые там обсуждались мне более всего понравился:

@y2-@y1-case

when (@m2<@m1 or (@m2=@m1 and @d2<@d1))
then 1
else 0
end


Похоже это должно работать быстрее пользовательской функции.
31 июл 03, 11:21    [282985]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро определить сколько лет человеку по дате рождения  [new]
MS SQL
Guest
а мне больше всего понравился:
select datename(yy,getdate()-'02/28/2003')-1900
31 июл 03, 17:14    [284002]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Как быстро определить сколько лет человеку по дате рождения  [new]
kominet
Member

Откуда:
Сообщений: 40
а кто нибудь может подсказать как реализовать тоже самое тока в виде запроса в Access .. именно в виде запроса так как база хранится в акцессе а работать с ней приходится из делфи?
11 мар 07, 16:10    [3884754]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро определить сколько лет человеку по дате рождения  [new]
JibSkeart
Member

Откуда: Из далекой галактики
Сообщений: 19870
А про бабушкин способ , что это мы забыли ?
не знаю про аксесс , но у меня работает :)

declare
 @c_date smalldatetime,
 @b_date smalldatetime
set @c_date = GetDate()
set @b_date = '15/05/1980' -- дата рождения

select substring(cast(cast(convert(varchar,@c_date,112) as int) - cast(convert(varchar,@b_date,112) as int) as varchar),1,2) 
11 мар 07, 17:29    [3884854]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить