SQL: вычитание даты из даты
Формат даты и времени
Формат даты MySQL поддерживает несколько форматов даты и времени. Их можно определить следующим образом:
ДАТА — сохраняет значение даты в формате ГГГГ-ММ-ДД. Например, 23.10.2008.
DATETIME — сохраняет значение даты и времени в формате ГГГГ-ММ-ДД ЧЧ: ММ: СС. Например, 2008-10-23 10:37:22. Поддерживаемые дата и время: от 1000-01-01 00:00:00 до 9999-12-31 23:59:59
TIMESTAMP похож на DATETIME с некоторыми отличиями в зависимости от версии MySQL и режима, в котором работает сервер.
Создание полей даты и времени
Таблица, содержащая типы данных DATE и DATETIME, создается так же, как и другие столбцы. Например, мы можем создать новую таблицу под названием Заказы, которая содержит столбцы для номера заказа, заказанного товара, даты заказа и даты доставки заказа:
Столбец ORDER_DATE — это поле MySQL DATE TIME, в котором мы записываем дату и время, когда был размещен заказ. Невозможно предсказать точное время для даты доставки, поэтому мы записываем только дату.
Форматы даты и времени
Чаще всего для обозначения дат используются дефис (-) и двоеточие (:), обозначающие часы. Но мы можем использовать любой символ или не добавлять символы.
Например, допустимы все следующие форматы:
Функции даты и времени
MySQL содержит множество функций, которые используются для управления датой и временем. В следующей таблице представлен список наиболее часто используемых функций:
Функция | Описание |
ДОБАВИТЬ() | Добавить дату. |
ВРЕМЯ ДОБАВЛЕНИЯ() | Это добавляет время. |
CONVERT_TZ() | Преобразование из одного часового пояса в другой. |
КОРДАТО() | Возвращает текущую дату. |
CURTIME() | Возвращает текущее системное время. |
DATE_ADD() | Добавьте одну дату к другой. |
MySQL DATE_FORMAT () | Устанавливает указанный формат даты. |
ДАТА() | Извлекает часть даты из выражения даты или даты и времени. |
ДАТАДИФ() | Вычтите одну дату из другой. |
ИМЯ ДНЯ() | Возвращает день недели. |
ДЕНЬ МЕСЯЦА() | Возвращает день месяца (1-31). |
ДЕНЬ НЕДЕЛИ() | Возвращает индекс дня недели из аргумента. |
ДЕНЬ ГОДА() | Возвращает день года (1-366). |
ИЗВЛЕКАТЬ | Получить часть даты. |
НЕСКОЛЬКО ДНЕЙ() | Преобразует номер дня в дату. |
FROM_UNIXTIME() | Задает формат даты UNIX. |
MySQL DATE_SUB () | Вычтите одну дату из другой. |
ТЕПЕРЬ() | Получить час. |
ПОСЛЕДНИЙ ДЕНЬ | Возвращает последний день месяца для темы. |
ДАТА ОКОНЧАНИЯ() | Создайте дату из одного года и одного дня в году. |
ДЕЛАТЬ ВРЕМЯ () | Возвращает значение времени. |
МИКРОСЕКУНДА() | Возвращает миллисекунды из аргумента. |
МИНУТА() | Возвращает минуты из аргумента. |
МЕСЯЦ() | Возвращает месяц с прошедшей даты. |
НАЗВАНИЕ МЕСЯЦА() | Возвращает название месяца. |
ТЕПЕРЬ() | Возвращает текущую дату и время. |
ДОБАВИТЬ_ ПЕРИОД() | Добавляет диапазон к месяцу-году. |
PERIOD_DIFF() | Возвращает количество месяцев между двумя периодами. |
ЧЕТВЕРТЬ() | Возвращает четверть часа от прошедшей даты в качестве аргумента. |
SEC_TO_TIME() | Преобразуйте секунды в формат «ЧЧ: ММ: СС’. |
В СООТВЕТСТВИИ С() | Возвращает второй (0-59). |
MySQL STR_TO_DATE () | Преобразуйте строку в дату. |
ДОПОЛНИТЕЛЬНОЕ ВРЕМЯ() | Это отнимает время. |
СИСТЕМА() | Возвращает время выполнения функции. |
ФОРМАТ ВРЕМЕНИ() | Установите формат времени. |
TIME_TO_SEC() | Возвращает аргумент, преобразованный в секундах. |
ПОГОДА() | Выберите в качестве аргумента долю времени из переданного выражения. |
ДИФФЕРЕНЦИАЛЬНЫЙ() | Это отнимает время. |
ЧАСЫ() | С одним аргументом эта функция возвращает дату или выражение даты и времени. Сумма аргументов возвращается с двумя аргументами. |
TIMESTAMPADD() | Добавляет интервал к datetime. |
TIMESTAMPDIFF() | Вычитает диапазон из даты и времени. |
СЕГОДНЯ() | Возвращает аргумент даты, преобразованный в дни. |
UNIX_TIMESTAMP() | Получает дату и время UNIX в формате MySQL. |
DATA_UTC() | Возвращает текущую дату в формате UTC). |
ORA_UTC() | Возвращает текущее время в формате UTC). |
UTC_TIMESTAMP() | Возвращает текущую дату и время в формате UTC). |
НЕДЕЛЯ() | Возвращает номер недели. |
ЕЖЕНЕДЕЛЬНЫЙ ДЕНЬ() | Возвращает индекс дня недели. |
НЕДЕЛЯ ГОД() | Возвращает календарную неделю даты (1-53). |
ГОД() | Возвращает год. |
ГОД НЕДЕЛЯ() | Возвращает год и неделю. |
Вы можете поэкспериментировать с этими функциями формата даты MySQL, даже не вводя никаких данных в таблицу. Например:
Вы можете попробовать объединить несколько функций в один запрос (например, чтобы найти день недели):
mysql> ВЫБРАТЬ ИМЯ МЕСЯЦА (ВРЕМЯ());
Внесение значений даты и времени в столбцы таблицы
Давайте посмотрим, как значения даты MySQL вставляются в таблицу. Чтобы продемонстрировать это, мы продолжим использовать таблицу заказов, которую мы создали в начале статьи.
Начнем с добавления новой строки заказа. Поле order_no будет автоматически увеличиваться на 1, поэтому нам просто нужно ввести значения order_item, дату создания заказа и дату доставки. Дата заказа — это время размещения заказа, поэтому мы можем использовать функцию NOW (), чтобы заполнить строку текущими датой и временем.
Дата доставки — это период времени после даты заказа, который мы можем вернуть с помощью функции MySQL DATE_ADD (), которая принимает дату начала (в нашем случае СЕЙЧАС ()) и ИНТЕРВАЛ (в нашем случае 14 дней). Например:
Этот запрос создает заказ для указанного товара с датой, временем выполнения и двумя неделями позже в качестве даты доставки:
Точно так же вы можете заказать товар со сроком доставки через два месяца.