Базы данных
и язык SQL

Страница 4 Примеры с функцией DATEDIFF

Навигация по уроку Связанные темы
Назад<<<СодержаниеВперёд>>>

Функция DATEDIFF (interval, date1, date2) возвращает разность во времени между двумя датами в виде интервала в тех или иных измерениях времени, например, в днях. Возможные интервалы времени и их условные обозначения даны на странице 3.

В примерах на этом уроке будем определять разность во времени в днях (dd).

Если вы хотите выполнить запросы к базе данных из этого урока на MS SQL Server, но эта СУБД не установлена на вашем компьютере, то ее можно установить, пользуясь инструкцией по этой ссылке.

Работаем с базой данных "Недвижимость". Скрипт для создания этой базы данных, её таблиц и заполения таблиц данными - в файле по этой ссылке.

Таблица Deal содержит данные о сделках. Для наших заданий в этой таблице будет важен столбец Date с данными о дате сделки. Таблица Object содержит данные об объектах. В этой таблице нам понадобятся значения столбцов Project (например, "хрущевка", "сталинка") и District (район, например, Пашино). Таблица Manager содержат данные о менеджерах фирмы. В этих таблицах FName и LName соответственно имя и фамилия. Нам понадобится LName.

Пример 6. Найти количество дней между первой и последней сделками. Пишем следующий запрос:

USE realestate; SELECT DATEDIFF (dd, (SELECT MIN(date) FROM Deal), (SELECT MAX(date) FROM Deal) );

Запрос вернёт следующее значение:

286

В этом и последующих запросах параметры date1 и date2 извлечены при помощи подзапросов. Что еще немаловажно, агрегатные функции MIN и MAX могут применяться не только по отношению к просто числам, но и по отношению к датам.

Пример 7. Найти количество дней между первой и последней сделкой с объектом проекта "хрущевка" Запрос будет следующим:

USE realestate; SELECT DATEDIFF (dd, (SELECT MIN(date) FROM Deal D JOIN Object Ob ON D.Object_ID = Ob.Obj_ID WHERE Ob.Project = 'хрущевка'), (SELECT MAX(date) FROM Deal D JOIN Object Ob ON D.Object_ID = Ob.Obj_ID WHERE Ob.Project = 'хрущевка') );

Запрос вернёт следующее значение:

247

Пример похож на предыдущий, но подзапросы уже посложнее: используются соединения таблиц при помощи JOIN.

Составить SQL запрос с DATEDIFF самостоятельно, а затем посмотреть решения

Пример 8. Найти количество дней между первыми сделками менеджеров Савельева и Петрова.

Правильное решение и ответ.

Поделиться с друзьями

Назад<<<СодержаниеВперёд>>>