Получение данных между двумя строками даты в MySQL

StackOverflow https://stackoverflow.com/questions/6818495

  •  26-10-2019
  •  | 
  •  

Вопрос

Я записывал данные в Твиттере для проекта, который я работаю над тем, что информация о дате сохраняется как Thu, 14 Jul 2011 06:21:48 +0000 в струнном поле.

Как выбрать данные, которые падают между двумя датированными с помощью MySQL? Я могу получить данные больше, чем значение или меньше, чем значение, но не между значениями.

Данные, например,:

Thu, 14 Jul 2011 06:21:48 +0000
Thu, 14 Jul 2011 12:18:21 +0000
Thu, 14 Jul 2011 18:48:00 +0000
Thu, 14 Jul 2011 23:48:02 +0000
Fri, 15 Jul 2011 06:48:10 +0000
Fri, 15 Jul 2011 12:48:00 +0000
Fri, 15 Jul 2011 18:43:32 +0000
Fri, 15 Jul 2011 23:44:08 +0000
Sat, 16 Jul 2011 06:47:08 +0000
Sat, 16 Jul 2011 12:46:49 +0000
Sat, 16 Jul 2011 18:45:41 +0000
Sat, 16 Jul 2011 23:41:27 +0000

Моя строка SQL:

SELECT * 
FROM twitter 
WHERE SUBSTR(twitter_date, 6, 11) >= '2011-06-15' 
AND SUBSTR(twitter_date, 6, 11) <= '2011-06-21'

я пытался BETWEEN Заявления тоже, но не повезло.

Любая помощь будет оценена!

Это было полезно?

Решение

Вы не можете использовать между ними, потому что они строки, а не фактические поля даты. Если вы знаете, что формат даты всегда будет таким же, вы можете сделать следующее:STR_TO_DATE(str,format)

SELECT * 
FROM twitter 
WHERE STR_TO_DATE(twitter_date, '%a, %c %b %Y %k:%i:%s') 
      between '2011-06-15' AND '2011-06-21'

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

Вы сравниваете «6 июля 2011 года» с 2011-06-15.

Так должно быть

SELECT * 
FROM twitter 
WHERE SUBSTR(twitter_date, 6, 11) >= '6 Jul 2011' 
AND SUBSTR(twitter_date, 6, 11) <= '21 Jul 2011'

Вы можете захотеть заглянуть в MySQLS STR_TO_DATE функция Это даст вам дату и между тем, чтобы работать, как и ожидалось.

Запрос потерпит неудачу. Вы сравниваете две строки, а не даты. Вы должны четко сказать MySQL, что вы хотите относиться к струнам как даты. Поскольку это информация о дате, храните ее в типе поля даты или поля DateTime в MySQL, что экономит вам все эти проблемы:

SELECT STR_TO_DATE(SUBSTR(twitter_date, 6, 11)) >= '2011-06-15' ...

Принуждение вашей левой стороны быть надлежащим значением даты намекает на MySQL, что он также должен рассматривать правую сторону как дату.


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

Например, в вашем запросе / данных выше, что произойдет, если у вас нет данных для одной из дат, которые вы запрашивали? Вы не получите вывода на эту дату, что может выглядеть странно при схеме и т. Д. Если вы используете технику, которую я описываю в прилагаемом вопросе, вы можете получить эту дополнительную информацию и другие полезные вещи, такие как день недели, месяц имя и т. д.

Выберите все месяцы в рамках данного промежутка даты, в том числе со значениями 0

Надеюсь, это поможет!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top