Изменение дат с помощью функций и операторов в Access
Office 365 ProPlus переименован в Майкрософт 365 корпоративные приложения. Для получения дополнительной информации об этом изменении прочитайте этот блог.
Эта статья применяется либо к файлу базы данных Microsoft Access (.mdb), либо к файлу базы данных Microsoft Access (.accdb), а также к файлу проекта Microsoft Access (.adp).
Умеренный: требуются базовые навыки макроса, кодирования и интероперабельности.
Сводка
В этой статье описываются функции и операторы, доступные в Microsoft Office Access 2007, Microsoft Office Access 2003 и в Microsoft Access 2002. С помощью функций и операторов можно изменить тип данных Date/Time с помощью примеров запросов. В примере запросов, которые можно использовать для изменения значений даты, используются таблицы в примере базы данных Northwind.mdb.
Пример базы данных Northwind для Access 2007 не использует те же поля, что и предыдущие версии базы данных образцов Northwind. В таблице Employees нет полей HireDate и BirthDate, которые включены в примерную базу данных Northwind для Access 2007. Поле EmployeeID было переименовано в ID, а поле FirstName переименовано в Имя.
Дополнительные сведения
Access предоставляет операторам и функциям проверку или изменение полей с типом данных Date/Time. В следующем примере запросы используют манипуляции с датами, функции вычисления и операторы сравнения, доступные в Access.
Корпорация Майкрософт предоставляет примеры программирования только в целях демонстрации без явной или подразумеваемой гарантии. Данное положение включает, но не ограничивается этим, подразумеваемые гарантии товарной пригодности или соответствия отдельной задаче. Эта статья предполагает, что пользователь знаком с представленным языком программирования и средствами, используемыми для создания и отладки процедур. Инженеры службы поддержки Майкрософт могут объяснить функциональность отдельной процедуры. Однако они не будут изменять эти примеры, чтобы предоставлять дополнительные функциональные возможности или создавать процедуры для удовлетворения ваших конкретных требований.
SELECT Date(), Now();
Функция Date() возвращает текущую дату в краткосрочном формате. Функция Now() возвращает текущую дату со временем.
SELECT Format (Now(), «dd mmmm yyyy»);
Для указания формата даты можно использовать функцию Format() со значениями дат. В этом примере запрос возвращает текущую дату в формате длинной даты (01 декабря 2003 г.).
Функция Day() ( функция, функция WeekDay() и функция Month() и Функция Year()
Из таблицы Сотрудники этот запрос возвращает дату найма, день найма, день недели найма, месяц найма и год найма для каждого сотрудника. Обратите внимание, что функция WeekDay() возвращает числовую величину, которая указывает день недели.
Функция DatePart()
Из таблицы Employees этот запрос возвращает всех сотрудников, родившихся до 1960 года. Функция DatePart() может использоваться для извлечения части указанной даты, например дня, месяца или года.
Функция DateDiff()
Из таблицы «Сотрудники» этот запрос возвращает ID сотрудника, имя, дату рождения и возраст каждого сотрудника. Функция DateDiff() возвращает разницу или задержку времени между двумя указанными значениями даты (с точки зрения дня, месяца, года или единиц времени, таких как часы, минуты и секунды).
Функция DateAdd()
Из таблицы «Сотрудники» этот запрос возвращает имя сотрудника, имя, дату найма и дату окончания 10-летия службы в компании. Функция DateAdd() прибавка к дате указывает определенное количество единиц времени, например день, месяц или год, а затем возвращает результат.
Можно напрямую добавить числовую величину к значению даты. Это необходимо для приумнождения значения даты на один день, как в следующем примере:
SELECT Date() + 1;
Этот запрос добавит текущую дату на один день, а затем возвращает итоговую дату.
Функция DateValue()
SELECT DateValue («20 ноября 2003 г.») AS ValidDate;
Функция DateValue() проверяет, является ли строка ввода допустимой датой. Если строка ввода признана допустимой датой, дата возвращается в краткосрочном формате. Если строка ввода не признана допустимой датой, возвращается утверждение «Несоответствие типа данных в выражении критериев». Функция DateValue() распознает различные форматы дат, такие как mm dd yyyy, dd mm yy, dd mmm yyyy и dd mmm yyyy hh:mm:ss long date format.
Функция DateSerial()
SELECT DateSerial (2003, 03, 1-1);
Функция DateSerial() возвращает значение даты для указанных параметров ввода года, месяца и дня. Параметры ввода могут быть выражениями, которые связаны с арифметическими операциями. Функция DateSerial() оценивает выражения в параметрах ввода, прежде чем возвращает итоговую дату.
В этом примере запрос возвращает последний день в феврале за 2003 год. Последний параметр ввода за день со значением 1 отводится на 1. В результате параметр месяца оценивается до 2.
Использование операторов сравнения со значениями дат
Для сравнения значений даты в выражениях и запросах можно использовать следующие операторы сравнения:
Функция DateDiff
Возвращает значение типа Variant (Long), указывающее на количество интервалов времени между двумя указанными датами.
Синтаксис
DateDiff(интервал, дата1, дата2, [ первый_день_недели, [ первая_неделя_года ]] )
Синтаксис функции DateDiff использует следующие именованные аргументы:
| Часть | Описание |
|---|---|
| интервал | Обязательный аргумент. Строковое выражение, которое обозначает интервал времени, используемый для вычисления разницы значений дата1 и дата2. |
| дата1, дата2 | Обязательный элемент; Variant (Date). Две даты, которые требуется использовать в расчете. |
| первый_день_недели | Необязательный аргумент. Константа, задающая первый день недели. Если она не указана, им является воскресенье. |
| первая_неделя_года | Необязательно. Константа, задающая первую неделю года. Если она не указана, первой неделею является неделя, начинающаяся 1 января. |
Параметры
Аргумент интервал имеет следующие параметры:
| Параметр | Описание |
|---|---|
| yyyy | Год |
| q | Квартал |
| m | Месяц |
| y | День года |
| d | День |
| w | День недели |
| ww | Неделя |
| h | Часы |
| n | Минуты |
| s | Секунды |
Аргумент первый_день_недели может принимать следующие значения:
| Константа | Значение | Описание |
|---|---|---|
| vbUseSystem | 0 | Используются параметры API NLS. |
| vbSunday | 1 | Воскресенье (по умолчанию) |
| vbMonday | 2 | Понедельник |
| vbTuesday | 3 | Вторник |
| vbWednesday | 4 | Среда |
| vbThursday | 5 | Четверг |
| vbFriday | 6 | Пятница |
| vbSaturday | 7 | Суббота |
| Константа | Значение | Описание |
|---|---|---|
| vbUseSystem | 0 | Используются параметры API NLS. |
| vbFirstJan1 | 1 | Начать с недели, содержащей 1 января (по умолчанию). |
| vbFirstFourDays | 2 | Первой неделей считается та, которая содержит хотя бы четыре дня нового года. |
| vbFirstFullWeek | 3 | Первой неделей считается первая полная неделя года. |
Примечания
Функция DateDiff используется для определения числа интервалов времени между двумя датами. Например, DateDiff можно использовать для вычисления числа дней между двумя датами или числа недель между сегодняшним днем и концом года.
Для вычисления числа дней между аргументами дата1 и дата2 используется значение «День года» («y») или «День» («d»). Если интервал задан как «День недели» («w»), DateDiff возвращает число недель между двумя датами. Если день дата1 приходится на понедельник, DateDiff считает число понедельников до дня дата2. День, соответствующий значению аргумента дата2, учитывается, а дата1 — нет.
Однако если интервал задан как «Неделя» («ww»), функция DateDiff возвращает число календарных недель между двумя датами. Для этого рассчитывается число воскресений между днями дата1 и дата2. DateDiff учитывает день дата2, если он приходится на воскресенье; день дата1 не учитывается, даже если он приходится на воскресенье.
Если значение дата1 соответствует более поздней дате, чем значение дата2, функция DateDiff возвращает отрицательное число. Аргумент первый_день_недели влияет на вычисления, если заданы значения «w» и «ww».
Если аргумент дата1 или дата2 содержит литерал даты, указанный год становится постоянной частью этой даты. Однако если аргумент дата1 или дата2 заключен в двойные кавычки (» «), а год опущен, при каждом вычислении выражения дата1 или дата2 в код вставляется текущий год. Это позволяет писать код, который можно использовать для разных лет.
При сравнении 31 декабря с 1 января следующего года функция DateDiff для года («yyyy») возвращает значение 1, не смотря на то, что разница составляет всего один день.
Если в свойстве Calendar задан григорианский календарь, аргументы дата1 и дата2 следует указывать соответствующим образом. Если используется календарь Хиджра, дата должна соответствовать ему.
Пример
В данном примере функция DateDiff отображает число дней между указанной датой и сегодняшним днем.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Какая встроенная функция в ms access используется для определения разницы между двумя датами
Функция DateDiff в запросах Access
Всем привет, сегодня разбираем функцию DateDiff в запросах Access. Если вы не знаете, как работает функция DateDiff в базе данных Microsoft Access, то дочитайте данную статью до конца.
На простых запросах мы разберем принцип работы встроенной функции DateDiff. Функция DateDiff в запросах Access необходима для вычисления определенного интервала (периода времени) между двумя датами.
Функция DateDiff в запросах Access
Синтаксис: DateDiff («Интервал»; Дата1; Дата2; [Первый день недели]; [Первая неделя года]).
Функция DateDiff имеет 5 аргументов: 3 обязательных и 2 необязательных.
1 аргумент — это интервал — это выражение, которое определяет интервал между двумя датами
2 и 3 аргументы — это те даты, с которыми мы работаем
4 аргумент (необязатеьный) — первый день недели.
5 аргумент (необязательный) — первая неделя года.
Все параметры первого аргумента — интервала представлены ниже:
Как вы видите, значения интервала такие же как и у функции DATEADD и DATEPART.
Значения 4 параметра функции DateDiff представлены ниже:
Так как первый день недели — понедельник, то значение данного параметра будет «2».
Значения 5 параметра функции DateDiff представлены ниже:
Так первая неделя года та, на которую приходится 1 января, данный параметр можно не указывать.
Приведем простой пример и посмотрим как работает функция DateDiff в запросах Access.
Создадим таблицу, которая будет состоять из 2 полей: «Дата 1» и «Дата 2», оба поля имеют тип «Дата/Время», формат — «краткий формат даты».
Заполним данную таблицу произвольными датами.
Давайте создадим запрос, который вычислит какое количество лет приходится на промежуток между двумя датами.
Результат работы запроса представлен ниже:
Приведем второй пример и посмотрим как работает функция DateDiff в запросах Access.
Давайте создадим запрос, который вычислит какое количество дней приходится на промежуток между двумя датами.
Результат работы запроса представлен ниже:
Приведем третий пример и посмотрим как работает функция DateDiff в запросах Access.
Давайте создадим запрос, который вычислит какое количество недель приходится на промежуток между двумя датами.
Результат работы запроса представлен ниже:
Хотите больше примеров, где разбирается функция DatePart в запросах Access? Например как можно использовать DateDiff в формах Access? Переходите по ССЫЛКЕ.
Если вам нужна готовая база данных Access, то ознакомьтесь со списком представленным ЗДЕСЬ.
Функции вычисления и отображения значений даты и времени в Access
Материал, изложенный в данной статье, требует наличия базовых знаний по использованию макросов и программированию.
Аннотация
Значение даты и времени хранится как число двойной точности, поэтому при выполнении операций над значениями даты и времени в выражении результаты могут быть отформатированы некорректно. В данной статье демонстрируется создание выражений и пользовательских функций для отображения определенных дат и расчета интервалов времени.
Корпорация Майкрософт приводит примеры программного кода только для иллюстрации и не предоставляет явных или подразумеваемых гарантий относительно их пригодности для применения в пользовательских приложениях. Примеры в данной статье рассчитаны на пользователя, имеющего достаточный уровень знаний соответствующего языка программирования и необходимых средств разработки и отладки. Специалисты служб технической поддержки Майкрософт могут пояснить назначение тех или иных конструкций кода в конкретном примере, но модификация примеров и их адаптация к задачам заказчика не предусмотрена.
Дополнительная информация
Отображение определенных дат
Для отображения определенных дат можно использовать функцию DateSerial(), позволяющую работать с элементами даты: днем, месяцем и годом. Например, для возврата определенных дат можно использовать приведенные ниже выражения в свойстве ControlSource текстового поля или в области проверки.
DateSerial(Year(Date()), Month(Date()), 1)
DateSerial(Year(Date()), Month(Date()) + 1, 1)
Последний день текущего месяца:
DateSerial(Year(Date()), Month(Date()) + 1, 0)
Последний день следующего месяца:
DateSerial(Year(Date()), Month(Date()) + 2, 0)
Первый день предыдущего месяца:
Последний день предыдущего месяца:
Первый день текущего квартала:
Последний день текущего квартала:
Первый день текущей недели (началом недели считается воскресенье):
Последний день текущей недели:
Первый день текущей недели (используются настройки, заданные в диалоговом окне «Параметры»):
Последний день текущей недели:
Дополнительные сведения о вычислении финансового года или финансового месяца см. в следующей статье базы знаний Майкрософт:
210249 Как определить финансовый год или месяц, соответствующий определенной дате, в Access 2000 (Эта ссылка может указывать на содержимое полностью или частично на английском языке)ВНИМАНИЕ! Выполнение описанных в этом примере действий приводит к изменению учебной базы данных Northwind.mdb. Рекомендуется создать резервную копию файла Northwind.mdb и выполнять эти действия, используя копию базы данных.
Расчет интервалов времени
Поскольку значение времени хранится как доля 24-часовых суток, при сложении, вычитании, умножении или делении временных интервалов длительностью более 24 часов результат может быть отформатирован неверно.
Например, если попытаться узнать число часов между двумя датами путем вычитания значений в Visual Basic, можно получить неверное число. Чтобы убедиться в этом, введите в области проверки следующий код и обратите внимание на то, что будет возвращено значение 0:00 вместо верного значения 53:00:
Для решения проблем с форматированием, которые возникают при работе со значениями времени, превышающими 24 часа, можно использовать функции Visual Basic Int() и CSng(), позволяющие разделить вычисленное значение времени на дни, часы, минуты и секунды. Например, чтобы создать отдельные переменные для этих значений, можно использовать в функции следующий код:
Переменные totalhours, totalminutes и totalseconds можно использовать для отображения значения времени в часах, минутах или секундах. Переменные days, hours, minutes и seconds позволяют разделить значение времени на части: дни, часы, минуты и секунды. Для отображения значений времени в разных форматах эти переменные можно объединять, как показано в приведенных ниже образцах функций.
Функция GetElapsedDays() вычисляет интервал времени между двумя значениями даты/времени и представляет результат в днях.
Функция GetElapsedTime() вычисляет интервал времени между значениями времени и представляет результат в днях, часах, минутах и секундах.
Функция GetTimeCardTotal() суммирует поле значений времени в таблице и представляет результат в часах и минутах.
Пример функции GetElapsedDays()
Чтобы создать функцию GetElapsedDays(), выполните перечисленные ниже действия.
Откройте учебную базу данных Northwind.mdb.
Создайте модуль и введите в разделе описаний следующую строку (если ее там еще нет):
Введите следующую функцию:
Для проверки этой функции создайте новый запрос для таблицы «Заказы».
Добавьте в таблицу запросов следующие поля:
Поле: ShippedDate
Показать: True
Поле: OrderDate
Показать: True
Поле: ElapsedTime: GetElapsedDays([ShippedDate]-[OrderDate])
Показать: True
Выполните запрос. Обратите внимание, что в столбце ElapsedTime отобразится число дней между датами ShippedDate и OrderDate для каждой записи в таблице «Заказы».
Учебная функция GetElapsedTime()
Чтобы создать функцию GetElapsedTime(), выполните перечисленные ниже действия.
Создайте таблицу с описанной ниже структурой и сохраните ее под именем TimeLog.
Таблица: TimeLog
————————
Имя поля: StartTime
Тип данных: Дата/время
Формат: Полный формат даты
Имя поля: EndTime
Тип данных: Дата/время
Формат: Полный формат даты
Откройте таблицу TimeLog в режиме таблицы, введите три приведенные ниже записи и закройте таблицу.
StartTime EndTime
———————————————
5/10/95 4:57:00 PM 5/15/95 2:38:00 AM
5/11/95 10:17:31 AM 5/24/95 6:05:00 PM
5/18/95 9:16:43 AM 5/19/95 5:03:00 PM
Создайте модуль и введите в разделе описаний следующую строку:
Введите следующую функцию:
Примечание. Функции GetElapsedTime необходимо передать дату и время.
Чтобы протестировать эту функцию, создайте новый отчет для таблицы TimeLog с помощью мастера автоотчета.
Откройте отчет в режиме конструктора.
Добавьте в разделе сведений о таблице TimeLog свободное текстовое поле и настройте его свойства следующим образом:
Textbox
—————
Имя: ElapsedTime
ControlSource: =GetElapsedTime([EndTime]-[StartTime])
Ширина: 3 дюйма
Просмотрите отчет. Обратите внимание на то, что в каждой записи будет отображено общее истекшее время в днях, часах, минутах и секундах.
Учебная функция GetTimeCardTotal()
Чтобы создать функцию GetTimeCardTotal(), выполните перечисленные ниже действия.
Примечание. В представленном образце кода использованы объекты доступа к данным (Microsoft). Для правильного выполнения этого кода требуется ссылка на библиотеку объектов Microsoft DAO 3.6. Для этого в редакторе Visual Basic в меню Сервис выберите команду Ссылки и убедитесь в том, что установлен флажок Библиотека объектов Microsoft DAO 3.6.
Создайте таблицу со следующей структурой и сохраните ее под именем TimeCard.
Таблица: TimeCard
————————
Имя поля: Daily Hours
Тип данных: Дата/время
Формат: Краткий формат времени
Откройте таблицу TimeCard в режиме таблицы, введите четыре приведенные ниже записи и закройте таблицу.
8:15
7:37
8:12
8:03
Создайте модуль и введите в разделе описаний следующую строку (если ее там еще нет):
Введите следующую функцию:
Чтобы протестировать эту функцию, введите в область проверки приведенную ниже строку и нажмите клавишу ВВОД:
Обратите внимание на то, что в области проверки будет отображено значение 32 часа и 7 минут.
Ссылки
Дополнительные сведения о вычислении значений даты/времени см. в следующей статье базы знаний Майкрософт:
210276 Хранение, вычисление и сравнение данных в формате даты/времени в Microsoft Access













