Я хочу привести ряд решений на часто встречающиеся задачи по работе с датами в SQL, с которыми сам ежедневно сталкивался, надеюсь, это будет актуально и полезно для вас.
Как получить текущую дату в SQL
WHERE date = CURDATE()
или другой вариант
WHERE date = STR_TO_DATE(now(), '%Y-%m-%d')
Прибавить к дате один час в SQL
DATE_ADD('2013-03-30', INTERVAL 1 HOUR)
Прибавить к дате один день в SQL
DATE_ADD('2013-03-30', INTERVAL 1 DAY)
Аналогично можно прибавлять любое количество дней к текущей дате.
Прибавить к дате один месяц в SQL
DATE_ADD('2013-03-30', INTERVAL 1 MONTH)
Аналогично можно прибавлять любое количество месяцев к текущей дате.
Получить вчерашний день в SQL
DATE_ADD(CURDATE(), INTERVAL -1 DAY)
или
DATE_SUB(CURDATE(), INTERVAL 1 DAY)
Получить дату начала текущей недели в SQL
эта одна из самых сложных на первый взгляд задач, но решается очень просто
CURDATE()-WEEKDAY(CURDATE());
Получить выборку с этого понедельника по текущий день недели в SQL
WHERE (
date BETWEEN
(CURDATE()-WEEKDAY(CURDATE()))
AND
CURDATE()
)
Получить выборку с первого числа текущего месяца по текущий день недели в SQL
WHERE (
date BETWEEN
(CURDATE()-WEEKDAY(CURDATE()))
AND
CURDATE()
)
Как получить дату рождения пользователя в SQL
SELECT name, birth, CURRENT_DATE,
(YEAR(CURRENT_DATE)-YEAR(birth))
- (RIGHT(CURRENT_DATE,5)<RIGHT(birth,5))
AS age
FROM user;
{reklama}
Найти всех пользователей у которых день рождение в следующем месяце в SQL
SELECT name, birth FROM user
WHERE MONTH(birth) = MONTH(DATE_ADD(NOW(), INTERVAL 1 MONTH));
или другой вариант
SELECT name, birth FROM pet
WHERE MONTH(birth) = MOD(MONTH(NOW()), 12) + 1;
Кроме вышеприведенных кейсов по работе с датами в SQL, рекомендую ознакомиться с документацией по следующим операторам :
NOW() – Возвращает текущую дату и время.
CURDATE() – Возвращает текущую дату.
CURTIME() – Возвращаем текущее время.
DATE() – Состоит из двух частей даты и времени.
EXTRACT() – Возвращает одно значения даты/времени.
DATE_ADD() – Добавляет до выборки указанное число дней/мину/часов и т.д.
DATE_SUB() – Вычитываем указанный интервал от даты.
DATEDIFF() – Возвращает значение времени между двумя датами.
DATE_FORMAT() – Функция для различного вывода информации о времени.
Работа с датами в SQl, как оказывается не такая сложная, и теперь вместо того чтобы вычислять периоды средствами PHP можно делать это еще на этапе выполнения SQL запроса и получать необходимую выборку данных.