Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Базы данных MySQL

  Все выпуски  

RusFAQ.ru: Базы данных SQL


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Базы данных SQL

Выпуск № 159
от 29.10.2006, 10:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 384, Экспертов: 55
В номере:Вопросов: 1, Ответов: 3


Вопрос № 60012: У меня есть отношение с двумя полями типа дата, можно ли получить , в Access 2000, как нибудь запросом разницу между датами в виде кол-ва дней, месяцев, лет, часов, минут, секунд. Например: Первое поле день рождения, второе когда человек впервые ...

Вопрос № 60.012
У меня есть отношение с двумя полями типа дата, можно ли получить , в Access 2000, как нибудь запросом разницу между датами в виде кол-ва дней, месяцев, лет, часов, минут, секунд.
Например: Первое поле день рождения, второе когда человек впервые устроился на работу. Со скольки лет начал работать человек?
Отправлен: 24.10.2006, 11:21
Вопрос задал: DragonTusk (статус: 2-ой класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Santana
Здравствуйте, 2!
Функция datediff вычисляет промежуток времени между указанными второй и первой датами, другими словами она находит календарный интервал между двумя датами. Результатом будет целое число со знаком, являющееся разностью между указанными частями второй и первой даты (date2 - date1).

В следующем запросе используется дата, равная 30 ноября 1985 года, для подсчета числа дней между этой датой и датами публикации книг, находящимися в столбце pubdate:



select newdate = datediff(day, pubdate, "Nov 30 1985")

from titles



Для книги, опубликованной 21 октября 1985 года, в предыдущем запросе будет получено число 40, т.е. число дней между 21 октября и 30 ноября. В следующем запросе календарный интервал вычисляется в месяцах:



select interval = datediff(month, pubdate, "Nov 30 1985")

from titles



Этот запрос укажет интервал в 1 месяц для книг, опубликованных в октябре, и 5 месяцев для книг, опубликованных в июне. Если первый аргумент функции datediff является более поздней датой по сравнению со вторым, то результат будет отрицательным. Поскольку для двух книг в таблице titles по умолчанию в столбце pubdate была указана функция getdate, то для них в этом столбце будет указана дата создания базы данных pubs. По этой причине в предыдущих запросах для этих книг будут получены отрицательные результаты.

Если один или оба аргумента этой функции имеют тип smalldatetime, то в процессе ее выполнения они преобразуются к типу datetime, чтобы вычисление было более точным. Секунды и миллисекунды для этого типа автоматически устанавливаются равными нулю при вычислении временного интервала.
Ответ отправил: Santana (статус: 6-ой класс)
Ответ отправлен: 24.10.2006, 11:55
Оценка за ответ: 5

Отвечает: Grigory
Здравствуйте, DragonTusk!
Для вычисления разницы между двумя датами в MS Access присутствует функция DateDiff. Вот примеры из Help:
Expression
=DateDiff("d", [OrderDate], [ShippedDate]) - Displays the variance in days between the values of the OrderDate and ShippedDate fields.
=DateDiff("yyyy", [Birthday1], [Birthday2]) - Displays the variance in years between the values of the Birthday1 and Birthday2 fields.
=DateDiff("m", #12/24/2000#, #11/26/2000#) - Displays the variance in months between the two dates. The expression evaluates to -1, since the first date falls after the second date.
=DateDiff("yyyy", #12/31/2000#, #1/1/2001#) - Displays the variance in years between the two dates. The expression evaluates to 1, even though only a day has elapsed.

LagTime: DateDiff("d", [OrderDate], [ShippedDate]) - Displays in the LagTime field the number of days between the values of the OrderDate and ShippedDate fields.
YearsLapsed: DateDiff("yyyy", #12/31/2000#, #1/1/2001#) - Displays in the YearsLapsed field the number of years between the two dates.
Ответ отправил: Grigory (статус: 3-ий класс)
Ответ отправлен: 24.10.2006, 17:02
Оценка за ответ: 4

Отвечает: Филатов Евгений Геннадьевич
Здравствуйте, 2!

Для примера посмотрите ответы на вопрос 38282 и 40959.

Насчет часов, минут и секунд будет сложно - надо думать, но по остальным можно.

В базе создаем таблицу BASE с полями DNAC и DPOS типа даты,
заносим несколько значений и запускаем запрос из приложения ( проверен на реальных данных ) .
При определении количества месяцев вычитаем 1, если день окончания меньше дня начала.
Отдельно выведено целое количество лет и месяцев.
Количество дней получается разницей между начальной датой + количество лет + количество месяцев.
В связи с тем, что данный запрос разрабатывался для отдела кадров, последний день больше на 1 ( если человек принят на работу и уволен в один и тот же день, все равно он отработал 1 день, хотя если просто отнять даты то 0 ) . Для исправления достаточно заменить строку dateadd ( 'd' , 1 , dpos ) на dpos.

С уважением.

Приложение:

Ответ отправил: Филатов Евгений Геннадьевич (статус: 5-ый класс)
Ответ отправлен: 24.10.2006, 19:23
Оценка за ответ: 5


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное