MySQL выбирает между двумя датами в формате ISO

Я хочу выбрать все строки в таблице mysql, у которых есть дата между заданными датами. Формат в моей базе данных, например,

"2018-09-28T12:00:00".

Это мой запрос:

SELECT d.field_datum_der_veranstaltung_value AS field_datum_der_veranstaltung_value, n.nid AS nid, n.title AS title
FROM 
{node} n
LEFT OUTER JOIN {field_data_field_datum_der_veranstaltung} d ON d.entity_id = n.nid
WHERE (d.field_datum_der_veranstaltung_value BETWEEN '2018-01-01T00:00:00' AND '2018-01-30T23:59:00') 
ORDER BY d.field_datum_der_veranstaltung_value ASC

Обратите внимание, это запрос, сгенерированный Drupal API, который работает (на случай, если вас интересует {node})

Теперь, когда даты в БД представляют собой строки, как я могу сравнить значения?

Что за тип field_datum_der_veranstaltung_value?

D-Shih 03.08.2018 15:30
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
1
104
2

Ответы 2

Вы можете попробовать использовать функцию STR_TO_DATE, чтобы получить DateTime

SELECT d.field_datum_der_veranstaltung_value AS field_datum_der_veranstaltung_value, n.nid AS nid, n.title AS title
FROM 
{node} n
LEFT OUTER JOIN {field_data_field_datum_der_veranstaltung} d ON d.entity_id = n.nid
WHERE (d.field_datum_der_veranstaltung_value
 BETWEEN STR_TO_DATE('2018-01-01T00:00:00', '%Y-%m-%d')  AND  STR_TO_DATE('2018-01-30T23:59:00', '%Y-%m-%d') ) 
ORDER BY d.field_datum_der_veranstaltung_value ASC

Или вы можете использовать функцию В РОЛЯХCAST(d.field_datum_der_veranstaltung_value AS DATETIME) для datetime.

SELECT d.field_datum_der_veranstaltung_value AS field_datum_der_veranstaltung_value, n.nid AS nid, n.title AS title
FROM 
{node} n
LEFT OUTER JOIN {field_data_field_datum_der_veranstaltung} d ON d.entity_id = n.nid
WHERE (CAST(d.field_datum_der_veranstaltung_value AS DATETIME)
 BETWEEN CAST('2018-01-01T00:00:00' AS DATETIME)  AND  CAST('2018-01-30T23:59:00' AS DATETIME)
ORDER BY d.field_datum_der_veranstaltung_value ASC

sqlfiddle

вот пример даты создания iso DATE_FORMAT(date, '%Y-%m-%dT%TZ'), попробуйте, как показано ниже

SELECT * from table_name
FROM table_name 
where datecondition>=DATE_FORMAT('2018-01-01T00:00:00', '%Y-%m-%dT%TZ')
and datecondition <=DATE_FORMAT('2018-01-30T23:59:00', '%Y-%m-%dT%TZ')

Другие вопросы по теме