Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как с помощью SQL-запроса узнать сколько человеку лет? [D5, Access]


AlexTregubov ©   (2005-02-16 11:53:00) 

Надо узнать сколько человеку сегоднялет. Использую запрос SELECT YEAR(NOW)-YEAR(DR) AS V FROM ...- не совсем подходит, ведь это значение верно только после дня рождения и не верно до даты рождения.


sniknik   (2005-02-16 16:40:00) [1]

уточнение
в конце вместо Now поставить Int(Now) (время "отсечь")


sniknik   (2005-02-16 16:35:00) [2]

нда, по моему в мой "перевод" вкралась ошибка
вроде так правильнее (но проверять все равно не буду ;о)))
Year(Now) - Year(BirthDate) + (DateSerial(Year(Now), Month(BirthDate), Day(BirthDate)) < Now)

(true в аксесс -1 false 0)


Johnmen   (2005-02-16 14:13:00) [3]

>Anatoly Podgoretsky ©   (16.02.05 13:53) [10]

Даже делить на 365,25 не даст правильный результат во всех возможных случаях.


Anatoly Podgoretsky   (2005-02-16 13:53:00) [4]

А високосные ?

а делить на 365,25
И о каких високосных можно говорить в этом случае, результат вычитания не дата, а интервал.


sniknik   (2005-02-16 13:04:00) [5]

> Аналог в Delphi:
"перевод" в access
Year(Now) - Year(BirthDate)  + 1 - DateSerial(Year(Now), Month(BirthDate), Day(BirthDate))


ЮЮ   (2005-02-16 12:26:00) [6]

>Задача то обычная, может кто решал красиво?

Задача, обычно ставится, "юбиляры в этом году", "уходящие на пенсию в этом году", но никогда,обычно, не ставится, как возраст на текущую дату

>и от громоздкости хочется избавиться
да какая там громоздкость-то? Функций в Accese не знаю, но, наверняка есть.
Аналог в Delphi:
 Year(Now) - Year(BirthDate) + 1 -
 Integer(
   Encode(Year(Now), Month(BirthDate), Day(BirthDate) < Now
 )


Digitman   (2005-02-16 12:15:00) [7]

SELECT Int(Int(Now()-[dr])/365) AS V FROM ..


AlexTregubov   (2005-02-16 12:14:00) [8]

ЮЮ - я это и сам понимаю, поэтому и спрашиваю, и от громоздкости хочется избавиться. Задача то обычная, может кто решал красиво?


Johnmen   (2005-02-16 12:13:00) [9]

>clickmaker ©   (16.02.05 12:12) [4]

А високосные ?
:)


clickmaker   (2005-02-16 12:12:00) [10]

datediff(day, BirthDate, getdate()) / 365


Virgo_Style   (2005-02-16 12:11:00) [11]

А так :

SELECT YEAR(NOW-DR) AS V FROM

нельзя сделать? Я, честно говоря, не помню...


ЮЮ   (2005-02-16 12:07:00) [12]

>после дня рождения и не верно до даты рождения.

В смысле? Естественно, что до дня рождения человеку меньше полных лет, чем после :)


Johnmen   (2005-02-16 12:03:00) [13]

Я не помню, есть в Аксесе ф-ии выделения дня, месяца и т.п. Есть ли условная ф-ия.
Если есть, то можно написать. Но будет громоздко...


Наверх

Титульная страница Поиск, карта сайта Написать письмо