【问题标题】:select between two dates based on month and year periodic mysql根据月份和年份定期mysql在两个日期之间选择
【发布时间】:2014-06-20 16:43:48
【问题描述】:

如何实现 MySQL 之间的数据选择。假设我有一个变量:

$dateA = '2014-06-25'
$dateB = '2014-08-26'

我做了一个这样的 MySQL 语法示例:

"select * from table where dateA >= $dateA and dateB <= $dateB"

所以我想使用这两个基于月份和年份的日期对 MySQL 进行选择,不包括日期本身:

对此有什么想法吗?

更新

例如,我想做的基本上是这样的:

"select * from table where dateA >= '2014-06' and dateB <= '2014-08'"

这基本上就是我想要的。

【问题讨论】:

  • 问题不清楚。你的意思是查询是select * from table where dateA &gt;= 20140701 and dateB &lt; 20140801?还是您的意思是在日期中给出的月份之间进行选择,而不是在那些确切的日期之间进行选择?你能给出一个预期的示例字符串吗?
  • @Dan 会调查的……谢谢!
  • @Popnoodles 我更新了您可以看到上面示例的问题,谢谢!
  • “问题解决了!我正在使用@Vulcronos 方法回答。”您没有在问题中发布答案。如果用户提供了适合您的答案,您应该投票赞成。如果它是解决问题的答案——就像在这种情况下——那么你应该把答案作为答案。

标签: php mysql sql select


【解决方案1】:

您可以使用字符串比较。

DATE_FORMAT(dateA,'%Y%m') 应返回如下日期:201406。您还需要更改变量的格式或对它们使用相同的方法。

where DATE_FORMAT(dateA,'%Y%m') >= DATE_FORMAT($dateA,'%Y%m') and 
DATE_FORMAT(dateB,'%Y%m') <= DATE_FORMAT($dateB,'%Y%m')

【讨论】:

    【解决方案2】:
    select *
    from table
    where dateA between date_format( $dateA, '%y-%m-01' ) and last_day( $dateB );
    

    【讨论】:

      【解决方案3】:
      select * from table where YEAR(dateA) > YEAR($dateA) and YEAR(dateB) < YEAR($dateB) 
          AND MONTH(dateA) > MONTH($dateA) and MONTH(dateB) < MONTH($dateB)
      

      那里可能有更高效的东西,这也可以

      【讨论】:

        【解决方案4】:

        我建议在 php 中进行更改,因为这样可以为更广泛的输入启用 mysql 查询缓存:

        $dateA = date("Y-m-01", strtotime('2014-06-25'));
        $dateB = date("Y-m-t", strtotime('2014-08-26'));
        

        【讨论】:

          【解决方案5】:

          使用以下 SQL 语句选择两个日期之间的数据:-

          $dateA = date('Y-m-d', strtotime('2014-06-25'));
          $dateB = date('Y-m-d', strtotime('2014-08-26'));
          
          
          SELECT * FROM table_name WHERE DATE_FORMAT(date_created, '%Y-%m-%d') 
          
          BETWEEN $dateA AND $dateB;
          

          【讨论】:

          • 这将使查询不可分割,并会导致完整的表扫描,因为必须检查每一行的 date_created 字段——即使它已被索引。解决方案不能操纵字段本身——比如date_created between date_format( $date_a, '%y-%m-01 ) and last_day( $date_b )
          【解决方案6】:
          $dateA = '2014-06-25';
          $dateB = '2014-08-26';
          $dateA_month = '2014-02-01';
          $dateB_month = '2014-02-31';
          "select * from table where dateA >= $dateA_month and dateB <= $dateB_month";
          

          我在二月份特意写了这个例子。这个选择器运行良好,即使所讨论的月份不以 31 日结束。期待日历粉丝的反对票:)

          【讨论】:

          • 尝试使用您的代码,效果很好!是的,为什么我以前没有考虑过。我的错误,谢谢
          【解决方案7】:

          你可以用这个

          WHERE (someField BETWEEN '2016-01-30 14:15:55' AND '2016-09-29 10:15:55')
          

          【讨论】:

            【解决方案8】:

            试试这个:

            "select * from table where [datetime_column] between " . $dateA . " and " .$dataB
            

            【讨论】:

            • 包括日期。 "...不包括它自己的日期"
            • 我的观点正是@Popnoodles,但感谢您的帮助,谢谢!梅尔文·考普曼斯
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-08-13
            • 1970-01-01
            • 1970-01-01
            • 2012-02-24
            • 1970-01-01
            相关资源
            最近更新 更多