Получение текущих даты и времени
Для получения текущей даты (без времени) в формате YYYY-MM-DD можно использовать функции:
- CURDATE()
- CURRENT_DATE()
Для получения текущего времени (без даты) в формате HH:MM:SS можно использовать функции:
- CURTIME()
- CURRENT_TIME()
Для получения текущих даты и времени в формате YYYY-MM-DD HH:MM:SS можно использовать любую из следующих функций:
- NOW()
- SYSDATE()
- CURRENT_TIMESTAMP
SELECT CURDATE(); или SELECT CURRENT_DATE();
Результат: 2016-08-28
SELECT CURTIME(); или SELECT CURENT_TIME();
Результат: 19:29:54
SELECT NOW(); или SELECT SYSDATE(); или SELECT CURRENT_TIMESTAMP;
Результат: 2016-08-28 19:29:54
Прибавление и вычитание временного интервала
С датами и временем часто приходится проводить арифметические операции: прибавлять к заданной дате определенный временной интервал или вычитать. Прибавление временного интервала можно осуществить тремя способами:
- Функция DATE_ADD(исходная_дата, INTERVAL выражение тип);
- Функция ADDDATE (исходная_дата, INTERVAL выражение тип);
- Выражение: исходная_дата + INTERVAL выражение тип.
Вычитание временного интервала также можно осуществить тремя способами:
- Функция DATE_SUB(исходная_дата, INTERVAL выражение тип);
- Функция SUBDATE (исходная_дата, INTERVAL выражение тип);
- Выражение: исходная_дата - INTERVAL выражение тип.
Исходная_дата – это дата, к которой прибавляется или вычитается определенный интервал времени. Выражение – это сам прибавляемый или вычитаемый интервал времени, заданный в текстовом формате. Тип – аргумент, указывающий тип прибавляемого интервала. Этот параметр уточняет, как правильно интерпретировать выражение. Например, выражение ‘3:24’ можно интерпретировать и как 3 часа 24 минуты, и как 3 минуты 24 секунды. Если указан тип «MINUTE_SECOND», то интерпретация будет однозначной. Связь между аргументами выражение и тип показана в таблице :
Следующие три команды делают одну и ту же операцию. Они прибавляют секунду к заданному времени.
SELECT '2016-09-10 23:59:59' + Interval 1 SECOND;
SELECT ADDDATE('2016-09-10 23:59:59', Interval 1 SECOND);
SELECT DATE_ADD('2016-09-10 23:59:59', Interval 1 SECOND);
Результат всех трех команд одинаковый: 2016-09-11 00:00:00.
Следующие три команды вычисляют дату предшествующую заданной ровно на полтора года:
SELECT DATE_SUB('2016-09-10 23:59:59', Interval '1-6' YEAR_MONTH);
SELECT SUBDATE('2016-09-10 23:59:59', Interval '1-6' YEAR_MONTH);
SELECT '2016-09-10 23:59:59' - Interval '1-6' YEAR_MONTH;
Результат всех трех команд одинаковый : 2015-03-10 23:59:59.
Функции перевода в другие единицы
Иногда бывает удобно работать с датой, представленной в виде количества дней прошедших с года 0. Для перевода даты в такой формат и обратно в MySQL существует две функции:
- TO_DAYS(дата) – возвращает номер дня соответствующего аргументу дата.
- FROM_DAYS(номер_дня) – возвращает дату в соответствии с номером дня.
SELECT TO_DAYS('2016-09-10');
Результат: 736582.
SELECT FROM_DAYS(736362);
Результат: 2016-02-03.
Обе функции не следует использовать для работы с датами до 1582 года. Так как при переходе на григорианский календарь были утеряны дни, которые данными функциями не учитываются.
Полезными также могут быть функции для перевода отрезка времени в секунды и обратно.
- Функция TIME_TO_SEC(отрезок_времени) переводит отрезок времени в секунды.
- Функция SEC_TO_TIME(секунды) переводит секунды в формат ‘часы:минуты:секунды’.
Следующая команда позволяет узнать, сколько секунд в периоде равном 2 часа, 23 минуты и 2 секунды:
SELECT TIME_TO_SEC('2:23:09');
Результат: 8589.
Чтобы сделать обратное преобразование, нужно выполнить команду:
SELECT SEC_TO_TIME(8589);
Результат: 02:23:09.