Допустим, нами была создана база данных, содержащая поля, указанные на рис. 4.14, причем поля «Дата экзамена» и «Дата рождения» имеют «Краткий формат даты», а поля «Время начала экзамена» и «Время окончания» - «Краткий формат времени».
Рис. 4.14. Создание таблицы базы данных
При составлении запросов с полями указанных типов при поиске конкретной даты, ее вводят в «Условие отбора», при этом при запуске запроса появятся ограничивающие значки #, например, при вводе условия = #1.2.06# появятся все экзамены, приходящиеся на эту дату. Однако, такой вариант работы имеет ограниченные возможности. Если требуется найти всех, кто, допустим, родился в мае, вряд ли это удастся сделать с помощью одного условия. Для создания сложных запросов, связанных с полями указанных типов, используются встроенные функции.
Наиболее популярные функции:
DATE() - возвращает текущую системную дату компьютера в виде 1.7.2006;
DAY([дата]) - возвращает день месяца. Обязательный аргумент [дата] может быть любым значением типа «ДАТА», например, именем поля соответствующего типа или просто произвольной датой.
MONTH([дата]) - возвращает номер месяца;
YEAR([дата])- возвращает год;
WEEKDAY([дата]) - возвращает номер дня недели, причем нумерация дней начинается с воскресенья (№ 1), понедельник - №2, вторник - №3 и т.д.
HOUR([время])- используется для определения часа, соответствующего указанному времени;
MINUTE ([время]) - используется для определения минут, соответствующего указанному времени;
SECOND([время]) - используется для определения секунд, соответствующих указанному времени;
TIME() - возвращает текущее системное время;
NOW() - возвращает текущую дату и время.
Приведем несколько примеров использования функции типа Дата/время.
Пример 1. Для определения количества дней, прошедших со времени экзамена, используется выражение, записанное с помощью Построителя выражений (рис. 4.15).
Рис. 4.15. Вычисляем дни, прошедшие со дня экзамена
Пример 2. Для определения фамилий тех, кто сдавал экзамен в пятницу WEEKDAY[Дата экзамена]=6 и 13-ого числа DAY[Дата экзамена]=13 используем запрос, конструктор которого приведен на рис. 4.16.
Рис. 4.16. Пятница, 13-ое число
Попробуйте по аналогии найти всех, кто родился в выходные дни.
Пример 3. Для определения студентов, родившихся в високосные года, создается запрос, приведенный на рис. 4.17.
Рис. 4.17. Поиск високосных лет
Если потребуется найти всех, кто родился в года, кратные пяти, что изменится в формуле?
Пример 4. Для определения фамилий всех, сдавших экзамены в 2006 году, используют выражение: Year([Экз]![Дата экзамена])=2006, которое вводят в строку «Условие отбора». Для выделения месяца и года из поля применяют выражения:
Месяц: Month([Экз]![Дата экзамена]) ;» Год: Year([Экз]![Дата экзамена])
Если необходимо узнать, сколько дней прошло между двумя датами, определяют их разность. Но иногда требуется определить количество месяцев, прошедших между двумя датами, возраст человека в годах, сроки выполнения работы в кварталах. Aссеss предоставляет для этого специальные функции.
Определение разницы между датами производят с помощью функции DATEDIFF(интервал; начальная дата; конечная дата). На первом месте задается интервал (в чем измеряется разница). Если это год, то используют yyyy, q –кварталы; m- месяцы; d- в днях; ww – в неделях; h – в часах; n – в минутах; s - в секундах.
~ Возраст1 : DateDiff ("yyyy"; [Экз]![Дата рождения]; [Экз]![Дата экзамена]) - определяет возраст студента на момент сдачи экзамена в годах;
~ Возраст2: DateDiff("m"; [Экз]![Дата рождения]; [Экз]![Дата экзамена]) - определяет возраст студента на момент сдачи экзамена в месяцах.
Составьте выражение, позволяющее определить стаж работы, если известны дата поступления на работу и дата ухода на пенсию.
Функция DATEADD(интервал, число, дата) предназначена для добавления или вычитания указанного временного интервала из значения даты. Например, с помощью этой функции можно вычислить дату, на 30 дней более позднюю, чем текущая, или время, на 45 минут более позднее, чем настоящее.
Для добавления дней к аргументу дата можно задавать временной интервал как день года ("y"), день месяца ("d") или день недели ("w").
Пример 1. Для определения даты, которая была через полтора года после дня рождения в Построителе выражений следует ввести следующую запись:
Дата: DateAdd("m";18;[Экз]![Дата рождения])
Пример 2. Поле «Новая дата» определяет дату через 10 лет после дня рождения, для чего в Построителе выражений вводится следующая запись:
Новая дата: DateAdd("yyyy";10;[Экз]![Дата рождения]).
Пример 3. Для определения всех, пришедших на экзамен до 11 часов и ушедших не позднее 14, необходимо создать запрос, конструктор и результат выполнения которого приведен на рис. 4.18.