Получение данных между двумя строками даты в MySQL - PullRequest
6 голосов
/ 25 июля 2011

Я записываю данные Twitter для проекта, над которым я работаю, информация о дате сохраняется как 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 заявления, но не повезло.

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

Ответы [ 5 ]

7 голосов
/ 25 июля 2011

Вы не можете использовать между ними, потому что они являются строками, а не фактическими полями даты. Если вы знаете, что формат даты всегда будет одинаковым, вы можете сделать следующее: 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'
2 голосов
/ 25 июля 2011

Вы сравниваете "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'
0 голосов
/ 25 июля 2011


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

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

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

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

0 голосов
/ 25 июля 2011

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

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

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

0 голосов
/ 25 июля 2011

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

...