Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.20;
Скачать: CL | DM;

Вниз

Как с помощью SQL-запроса узнать сколько человеку лет?   Найти похожие ветки 

 
AlexTregubov   (2005-02-16 11:53) [0]

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


 
Johnmen ©   (2005-02-16 12:03) [1]

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


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

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

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


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

А так :

SELECT YEAR(NOW-DR) AS V FROM

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


 
clickmaker ©   (2005-02-16 12:12) [4]

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


 
Johnmen ©   (2005-02-16 12:13) [5]

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

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


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

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


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

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


 
ЮЮ ©   (2005-02-16 12:26) [8]

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

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

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


 
sniknik ©   (2005-02-16 13:04) [9]

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


 
Anatoly Podgoretsky ©   (2005-02-16 13:53) [10]

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

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


 
Johnmen ©   (2005-02-16 14:13) [11]

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

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


 
sniknik ©   (2005-02-16 16:35) [12]

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

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


 
sniknik ©   (2005-02-16 16:40) [13]

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



Страницы: 1 вся ветка

Текущий архив: 2005.03.20;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.071 c
3-1108808969
xman
2005-02-19 13:29
2005.03.20
Oracle rdb 8.0.0.4


1-1110013855
msgipss
2005-03-05 12:10
2005.03.20
Вопрос заварника про this


1-1109858480
Erik1
2005-03-03 17:01
2005.03.20
Выдление всей неактивной записи в DbEHGrid.


1-1109954622
muhan
2005-03-04 19:43
2005.03.20
Как создать кнопку


4-1107719981
aha
2005-02-06 22:59
2005.03.20
чтение порта принтера ....где ошибка моя ?