Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Как обновлять возраст по дате рождения в БД


Автор: User 12.4.2005, 16:10
Я сгенерировал по дате возраст клиента, Затем со временем как вы понимаете возраст может меняться и данные я собираюсь автоматически обновлять в БД. В Access я нашел такую возможность:

SELECT Year(Date()-aaa)-1900 from bbb

bbb-таблица
aaa-поле с датой
но почему-то приходится еще 1900 отнимать

Но проблема в том что у меня Paradox. Такое возможно проделать и для него. Что то не могу найти данного кода. А может как то еще можно обновлять возраст в зависимости от текущей даты?
Если можно то примерчик подбрости? smile

Автор: Marriage 12.4.2005, 16:39
В оракле есть Sysdate. Попробуй, может прокатит.

Автор: Петрович 12.4.2005, 17:06
А зачем в базе хранить возраст? Там надо хранить дату рождения. А возраст получать в запросе, как вычисляемое поле. Всегда будет актуальным smile.

Автор: DimW 13.4.2005, 08:31
простыми словами мусор в БД некчему!!!

Автор: User 14.4.2005, 13:09
согласен. Вы правы. Спасибо за совет.

Автор: User 14.4.2005, 13:32
А все же почему Paradox не позволяет так обновлять?

SELECT Year(Date()-aaa)-1900 from bbb

bbb-таблица
aaa-поле с датой
но почему-то приходится еще 1900 отнимать

Может там есть что то другое?

Автор: Петрович 19.5.2005, 08:27
Цитата(User @ 14.4.2005, 14:32)
А все же почему Paradox не позволяет так обновлять?

SELECT Year(Date()-aaa)-1900 from bbb

В Paradox нет функций Year и Date.

Цитата(User @ 14.4.2005, 14:32)
но почему-то приходится еще 1900 отнимать

В Accesse, как ты указывал ранее?
Все очень просто.
Предположим что Date() - возвращает 19.05.2005, а значение ааа равно 17.05.2004.
Тогда результатом Date()-aaa будет 367 - число дней прошедших между датами.
Но, поскольку функция Year интерпретирует свой аргумент как дату, то 367 будет рассматриваться как дата. Даты же в Access'е кодируются как число прошедших дней от 01.01.1900. Соответственно 367, соответствует дате 01.01.1901.
Вот тебе и вся разгадка.
А теперь, почему так делать нельзя smile.
Я не зря выбрал в примере дату 17.05.2004. Если бы я выбрал дату 18.05.2004, то посмотрим что получилось бы:
Казалось-бы, если у человека день рождения 18.05.2004, то, 19.05.2005 ему уже один год. Но, по мнению Access, ему все еще 0 лет!
Все потому, что 19.05.2005-18.05.2004 = 366 дней. А 366 соответствует 31.12.1900 - ведь 1900 год это високосный год! Вот и получится ошибочный результат.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)