Sql

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


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

“Время – ткань, из которой состоит жизнь” сказал Бенджамин Франклин. Интерпретируя данное высказывание в сферу программирования, получим “Время – то, что делает наши приложения живыми“. Работа со временем и датой, открывает новые возможности для простых скриптов.

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

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

Как получить текущую дату в SQL

1 вариант:
WHERE date = CURDATE()

2 вариант:
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;

Найти всех пользователей у которых день рождение в следующем месяце в 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 запроса и получать необходимую выборку данных.
Теги:
дата
Добавлено: 23 Сентября 2013 12:47:55 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...