| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > Как обновлять возраст по дате рождения в БД |
| Автор: User 12.4.2005, 16:10 |
| Я сгенерировал по дате возраст клиента, Затем со временем как вы понимаете возраст может меняться и данные я собираюсь автоматически обновлять в БД. В Access я нашел такую возможность: SELECT Year(Date()-aaa)-1900 from bbb bbb-таблица aaa-поле с датой но почему-то приходится еще 1900 отнимать Но проблема в том что у меня Paradox. Такое возможно проделать и для него. Что то не могу найти данного кода. А может как то еще можно обновлять возраст в зависимости от текущей даты? Если можно то примерчик подбрости? |
| Автор: Marriage 12.4.2005, 16:39 |
| В оракле есть Sysdate. Попробуй, может прокатит. |
| Автор: Петрович 12.4.2005, 17:06 |
| А зачем в базе хранить возраст? Там надо хранить дату рождения. А возраст получать в запросе, как вычисляемое поле. Всегда будет актуальным |
| Автор: 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 | ||||
В Paradox нет функций Year и Date.
В Accesse, как ты указывал ранее? Все очень просто. Предположим что Date() - возвращает 19.05.2005, а значение ааа равно 17.05.2004. Тогда результатом Date()-aaa будет 367 - число дней прошедших между датами. Но, поскольку функция Year интерпретирует свой аргумент как дату, то 367 будет рассматриваться как дата. Даты же в Access'е кодируются как число прошедших дней от 01.01.1900. Соответственно 367, соответствует дате 01.01.1901. Вот тебе и вся разгадка. А теперь, почему так делать нельзя Я не зря выбрал в примере дату 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 год это високосный год! Вот и получится ошибочный результат. |