Как сравнивать даты в MySQL
MySQL предоставляет возможность сравнивать различные даты между собой, или с каким-то определенным выражением. В этой статье мы обсудим, как работать с датой в Mysql, как из сравнивать и строить запросы с учетом дат.
Когда вам нужно сравнить дату какого-то столбца с произвольной датой, вы можете использовать функцию DATE() , которая извлекает дату из переданного аргумента (без учета времени) и сравнить ее со строкой нужной вам даты.
В прошлой своей статье я писал про работу с индексами. А в этой затрону не менее важную тему работы с датой в MySQL, понимание которое необходимо каждому разработчику.
Например, предположим, что у вас есть таблица MySQL под названием users со следующими строками:
Теперь вам нужно выбрать все строки из таблицы users , у которых значение last_update больше 2021-08-01 .
И это достаточно просто сделать:
Результат запроса выше будет следующим:
При сравнении столбца типа DATETIME или TIMESTAMP с датой в виде строки (как в запросе выше), MySQL автоматически преобразует значения к единому формату для сравнения и веронет подходящзие результаты.
Чтобы проверить результат запроса добавим оператор ORDER BY в приведенный выше запрос.
Вы можете сразу определить, удовлетворяет ли запрос вашему требованию, взглянув на первую строку. Как и в приведенном выше примере, самое раннее значение столбца last_update должно быть 2021-08-02 .
Вы также можете использовать оператор BETWEEN , чтобы выбрать все строки, в которых столбец даты находится между двумя указанными выражениями даты:
Приведенный выше запрос выведет следующий результат:
НО! MySQL допускает только один формат даты: yyyy-mm-dd , поэтому вам нужно форматировать любое строковое выражение даты по которым вы хотите выбирать данные к нужному формату.
Зачем использовать функцию DATE() для сравнения дат
Функция MySQL DATE() извлекает часть даты из столбца DATETIME или TIMESTAMP и приводит её к формату строки, как показано ниже:
Эта функция используется для того, чтобы MySQL использовал для сравнения только часть даты вашего столбца, без учета времени.
Если не использовать функцию DATE() , то MySQL также будет сравнивать и время столбца с вашим строковым выражением. Таким образом, результатом будут записи, полностью совпадаюащие до секунды.
Возвращаясь к приведенному выше примеру таблицы, следующий запрос:
Вернет такие результаты:
Как видно из результатов, условие сравнения last_update > "2021-08-01" становится last_update > "2021-08-01 00:00:00" , и MySQL возвращает соответствующий набор результатов.
Если вы собираетесь сравнивать записи включая время, то вам нужно добавить часть времени в ваше строковое выражение.
Следующий запрос из той же таблицы:
Даст следующий результат:
Сравнение дат между двумя столбцами дат
Если у вас уже есть два столбца даты, то вы можете сразу же сравнить их с помощью операторов < , <= , = , >= , > или BETWEEN .
Предположим, что в вашей таблице есть столбцы last_update и last_login , как показано ниже:
Чтобы получить все строки, в которых столбец last_login находится позже столбца last_update , вы можете использовать следующий запрос:
Результат будет следующим:
Вот каким образом вы можете выполнять сравнение дат в MySQL.
Не забудьте, что вам нужно иметь строковое выражение даты, отформатированное как yyyy-mm-dd или yyyy-mm-dd hh:mm:ss , если вы хотите сравнить и временную часть.
Выбор дат за определнный интервал
Очень часто приходится выбирать записи с датой за определнный интервал. Для этих целей в MySql существуют встроенная функции INTERVAL , упрощающая работу с датами за определенный период.
Например, для того, чтобы выбрать записи, обновленные за последний год, выполним запрос:
При том, что INTERVAL может работать с различными интервалами времени:
- SECOND — секунды
- MINUTE — минуты
- HOUR — часы
- DAY — дни
- MONTH — месяцы
- YEAR — года
Те же самые действия применимы и к UPDATE-операциям:
Резюме
В этой статье поговорили про работу с датами в Mysql. Как можно выбрать даты определенной даты, или по указанному интервалу. А так же, как работать с колонками дат разных типов.
Если вы хотите поупражняться с запросами, то вот вам демонстрационная таблица:
Mysql Compare two datetime fields
![]()
04:00:00 is 4AM, so all the results you’re displaying come after that, which is correct.
If you want to show everything after 4PM, you need to use the correct (24hr) notation in your query.
To make things a bit clearer, try this:
That will show you the date, and its 12hr time.
You can use the following SQL to compare both date and time —
Attached mysql output when I used same SQL on same kind of table and field that you mentioned in the problem-
Сравнение дат в MySQL

База данных
Когда мы говорим о RDMS (системе управления реляционными базами данных), первое, что приходит нам в голову, — это MySQL, которая очень популярна из-за ее характеристик высокой гибкости. MySQL управляет данными веб-сайта, используя различные функции, включая DATE (). В этой записи мы обсудим, что такое функция DATE () и как ее можно использовать для сравнения в MySQL.
Что такое функция DATE () в MySQL
Функции используются для получения определенных результатов путем выполнения одного предложения. DATE () также является одной из функций, которые используются в MySQL для извлечения даты из данных таблицы и данных на основе даты, кроме того, ее также можно использовать для сравнения дат таблицы.
Как функция DATE () используется для сравнения в MySQL
Функция ДАТА () может использоваться для сравнения даты в нескольких целях, некоторые из них:
- Для извлечения конкретных данных на основе даты с помощью знаков неравенства или равенства
- Для извлечения конкретных данных на основе даты между разными столбцами
Мы объясним оба вышеупомянутых сценария на некоторых примерах, но прежде чем перейти к нему, давайте обсудим общий синтаксис функции DATE ().
Синтаксис функции ДАТА ()
Общий синтаксис использования DATE ():
Объяснение приведенного выше синтаксиса:
- Используйте предложение «SELECT * FROM» для выбора таблицы и введите имя таблицы вместо table_name.
- Используйте предложение WHERE, чтобы применить условие
- Также используйте функцию ДАТА и замените имя_столбца, дату которого вы хотите сравнить, и опишите условие.
Что следует иметь в виду
При использовании функции DATE () вы должны помнить следующее:
- Данные таблицы, содержащей даты, должны быть определены с типом данных DATE.
- Формат даты, вставляемой в таблицу, должен быть [ГГГГ-ММ-ДД].
- Дата должна быть вставлена в виде строки с использованием одинарных апострофов.
Как использовать функцию DATE () для сравнения в MySQL
Для большего понимания рассмотрим пример таблицы, которая уже создана и может быть отображена с помощью команды:
Если мы хотим сравнить дату присоединения всех сотрудников и извлечь данные о тех сотрудниках, которые присоединились после 2001-01-01, используя DATE (), мы можем сделать это, выполнив команду:
Из вышеприведенного вывода он извлек тех сотрудников, которые присоединились к компании после 2000-01-01, аналогично, чтобы узнать самых старых сотрудников компании, мы можем выполнить следующую команду:
Точно так же, если мы хотим извлечь данные о сотрудниках, которые получили повышение в период с 01.01.2018 по 31.01.2021, мы можем узнать это, выполнив команду:
Заключение
Функции позволяют веб-разработчикам легко управлять данными, используя их, которые принимают один или два ввода и возвращают конкретный единственный вывод. DATE () — одна из функций, которая используется для получения дат из данных таблицы, но также может использоваться для сравнения данных на основе дат. В этой статье мы обсудили функцию DATE (), используемую для сравнения, объяснив ее общий синтаксис и с помощью примеров для лучшего понимания.
В SQL как сравнивать значения даты?
Использование синтаксиса MySQL и наличие таблицы со строкой типа:
Есть ли способ сделать что-то вроде:
Я пытаюсь, но на самом деле не могу заставить его работать.
5 ответов
Nevermind нашел ответ. Тай же для всех, кто хотел ответить.
Uh, WHERE mydate<=’2008-11-25′ — это способ сделать это. Это должно работать.
Появляется сообщение об ошибке? Вы используете древнюю версию MySQL?
Изменить: следующее работает отлично для меня в MySQL 5.x
В стандартном синтаксисе SQL вы должны использовать:
То есть ключевое слово DATE должно предшествовать строке. Однако в некоторых СУБД вам не обязательно быть такими явными; система автоматически преобразует столбец DATE в строку или строку в значение DATE. Есть номинально некоторые интересные последствия, если DATE преобразуется в строку — если у вас есть даты в первом тысячелетии (0001-01-01.. 0999-12-31), а начальные ноль (ов) опущены система форматирования.
Возможно, проблема заключается в том, что вы имеете дело с данными DATETIME, а не только с датами. Если строка имеет mydate, которая является «2008-11-25 09:30 AM», то ваш WHERE mydate <= ‘2008-11-25’; не собирается возвращать эту строку. «2008-11-25» имеет подразумеваемое время 00:00 (полночь), поэтому, хотя часть даты одинакова, они не равны, а mydate больше.
Если вы используете < ‘2008-11-26’ вместо <= ‘2008-11-25’, это сработает. Метод Datediff работает, потому что он сравнивает только часть даты и игнорирует время.