【问题标题】:Getting data between two date strings in MySQL在 MySQL 中获取两个日期字符串之间的数据
【发布时间】:2011-10-12 16:58:52
【问题描述】:

我一直在为我正在处理的项目记录 Twitter 数据,日期信息在字符串字段中保存为 Thu, 14 Jul 2011 06:21:48 +0000

如何使用 mySQL 选择介于两个日期之间的数据?我可以获得大于或小于某个值但不能介于 to 值之间的数据。

数据例如是:

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 语句,但没有成功。

任何帮助将不胜感激!

【问题讨论】:

  • 考虑使用BETWEEN关键字。
  • @genesis,这不是重复的,仔细看看
  • 为了未来的理智,您可能希望修改您的表以将twitter_date 列记录为实际的timestamp 列。

标签: mysql sql date between


【解决方案1】:

您不能使用 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'

【讨论】:

    【解决方案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'
    

    【讨论】:

      【解决方案3】:

      您可能想查看 MySQL 的 STR_TO_DATE 函数。这将为您提供一个日期,并且应该按预期工作。

      【讨论】:

        【解决方案4】:

        查询将失败。您正在比较两个字符串,而不是日期。您需要明确告诉 MySQL 您要将字符串视为日期。既然是日期信息,那么在 MySQL 中将其存储为 date 或 datetime 字段类型,这样就省去了你所有的麻烦:

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

        强制您的左侧为正确的日期值将提示 MySQL 它也应将右侧视为日期。

        【讨论】:

          【解决方案5】:


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

          例如,在您上面的查询/数据中,如果您查询的日期之一没有数据,会发生什么情况?你不会得到那个日期的输出,这在绘制图表时可能看起来很奇怪,等等。如果你使用我在附加问题中描述的技术,你可以获得额外的信息,以及其他有用的东西,比如星期几、月份姓名等。

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

          希望有帮助!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-11-16
            • 2019-01-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-04-19
            相关资源
            最近更新 更多