Sql условие по дате

Одной из самой сложной работы в php считаю запросы в mysql по дате. Во-первых, не всегда логически просто понять что нужно выбрать если у нас сложные условия, типа: выбрать все даты из БД, которые больше такого-то отрезка времени, но меньше текущей даты увеличенной на 25 дней. Во-вторых, возникают другие проблемы от формата до самих запросов.

Начнем с формата хранения даты в БД

Вспомните тип поля timestamp, у него формат времени такой: гггг-мм-дд чч:мм:сс, например: 2017-11-05 14:23:05. Рекомендую использовать в своих базах именно этот формат, т.к. это стандарт. За счет него можно будет выгружать только время или дату, или одновременно то и другое. Не обязательно тип поля брать timestamp, можно использовать обычный text.

Примеры mysql запросов

Теперь рассмотрим практические примеры выборок по дате с учетом того, что дата записана в формате гггг-мм-дд чч:мм:сс:

1. Выбираем все записи в диапазоне: дата в БД select * from ruefz_jcomments where DATE(date)

2. Выбираем данные за текущий месяц: дата в БД > от 1 числа этого месяца и дата select id from tab where date > LAST_DAY(CURDATE()) + INTERVAL 1 DAY — INTERVAL 1 MONTH and date
Расшифровка: выбрать все id записи, в которых дата > последний день месяца сегодняшней даты + 1 день — 1 месяц и дата select ‘

4. За текущую неделю
select id from tab where date > DATE_SUB(CURDATE(), INTERVAL (DAYOFWEEK(CURDATE()) -1) DAY) and date

5. выбираем все записи в диапазоне: (текущая — 10 дней) select * from ruefz_jcomments where DATE(date) = DATE_SUB(NOW(), INTERVAL 10 DAY)

По этим примерам вам будет понятно, как составлять свои решения. Зачастую, при работе с датами вам потребуется использовать запросы DATE_ADD – прибавление, DATE_SUB — вычитание, CURDATE() — сегодняшняя дата, NOW() — сегодняшняя дата и время.

Читайте также:  Acer aspire e1 572g материнская плата

Изменить формат вывода времени в mysql

Если из БД надо взять дату в другом формате, мы можем изменить ее на "лету", для обработки на php скриптах:

DATE_FORMAT(date,format) — Форматирует величину date в соответствии со строкой format.

Пример:
$result = mysql_query("SELECT DATE_FORMAT(‘1997-10-04 22:23:01’, ‘%d.%m.%Y %H:%i:%S’) AS datess FROM csv");
while ($row=mysql_fetch_array($result)) <
echo $row["datess"]."
"; >//05.11.2017 14:23:55

В последнем примере мы приводим дату из БД в читаемый вид для пользователя.

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

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

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

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

Имею таблицу вот такого вида:

Не могу сделать выборку по дате и времени. Делаю так:

Но выдаются значения только за последнюю дату.

Читайте также:  An actual fps pack zip

Подскажите как правильней будет сделать запрос

1 ответ 1

Вам нужно выбирать по сумме даты и времени

необходимо, чтобы изначально существенно ограничить выборку. Если у вас поле DateReaders индексировано, то вначале делаем быструю выборку по индексированному полю, а потом доуточняем ее.

Если же индекса по полю DateReaders нет, то и условие не нужно. В любом случае будет полный перебор записей

А вообще разделение полей даты и времени в 90% плохая архитектура. Если вам не нужны выборки за определенное время для каждого дня, то эти поля нужно объединить в одно поле типа TIMESTAMP

Rate this post

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *