在MySQL中的两个日期字符串之间获取数据

时间:2011-07-25 15:30:01

标签: mysql sql date between

我一直在为我正在处理的项目记录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 个答案:

答案 0 :(得分:7)

您不能在两者之间使用,因为它们是字符串而不是实际的日期字段。如果您知道日期的格式始终相同,则可以执行以下操作: 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'

答案 1 :(得分:2)

您正在比较“2011年7月6日”与2011-06-15。

应该是

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

答案 2 :(得分:0)

您可能需要查看MySQL STR_TO_DATE函数。这将给你一个日期和之间应该按预期工作。

答案 3 :(得分:0)

查询将失败。你要比较两个STRINGS,而不是日期。您需要明确告诉MySQL您要将字符串视为日期。由于它是日期信息,因此将其存储在MySQL中的日期或日期时间字段类型中,这可以为您节省所有这些麻烦:

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

强制你的左侧成为一个正确的日期值会暗示MySQL它应该将右侧视为日期。

答案 4 :(得分:0)


一旦您更改了表格以在正确的DATETIME字段中保存日期数据,您可能需要参考我对以下关于日期的问题的答案并过滤它们,这可能证明是有用的。

例如,在上面的查询/数据中,如果您查询的某个日期没有数据,会发生什么?你没有得到该日期的输出,这可能在图表等时看起来很奇怪。如果你使用我在附带的问题中描述的技术,你可以获得其他信息,以及其他有用的东西,如星期几,月份名字等。

Select all months within given date span, including the ones with 0 values

希望有所帮助!