Главная / Прочие материалы > SQL Работа с датами

SQL Работа с датами

SQL работа с датами – настолько важна, что без знания основных sql операторов ни в одном стоящем проекте нельзя обойтись. Как ни крути, но во всех сервисах существует надобность работы со временем. Как правило, это вычисление периодов с одной по другую дату, например вывод списка зарегистрировавшихся пользователей за год, месяц, день, час.

Я хочу привести ряд решений на часто встречающиеся задачи по работе с датами в 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 запроса и получать необходимую выборку данных.
11-03-2016, 23:35. Разместил: administrator
Вернуться назад