【问题标题】:Mysql date range query only check date without check month and yearMysql日期范围查询只查日期不查年月
【发布时间】:2017-09-24 19:56:48
【问题描述】:

我只想根据日期的日期条件选择记录,而不检查月份和年份。

Table structure 
------------------------------------
id | user_id  | amount | created_on
------------------------------------

如果我选择日期为 4 月 15 日至 4 月 25 日,那么我需要在 4 月 15 日至 4 月 25 日、3 月 15 日至 3 月 25 日等之间记录..

从日期中获取日期并将其与

进行比较似乎很容易
Select sum(amount) from sales where DATEFORMAT(created_on, %d) >= 15 and DATEFORMAT(created_on, %d) <=25

但是当我选择日期为 3 月 28 日至 4 月 5 日时如何查找记录,那么我需要 2 月 28 日至 3 月 5 日、1 月 28 日至 2 月 5 日的数据……等等

【问题讨论】:

  • 在这种情况下你不能没有月份检查它:)
  • @Goikiu 2 月 28 日、1 月 28 日等数据呢?
  • 我认为如果不使用完整日期,您将无法实现这一目标。但是,使用完整日期将与您所要求的不同;)

标签: php mysql date date-range


【解决方案1】:

您可以使用 SQL BETWEEN 运算符

Select sum(amount) from sales where created_on BETWEEN '2017/03/28'  and '2017/04/05'

来源SQL Between Operator

【讨论】:

  • 操作员要求提供一个没有年月检查的解决方案。
  • 您也在比较月份...2 月 28 日至 3 月 5 日、1 月 28 日至 2 月 5 日等数据呢?
  • 仅使用 MySQL 是无法实现的。您可以通过在 PHP 中循环来获得总和。获得您想要的特定日期,您可以在完成后处理结果。您仍然可以在查询中使用此 SQL 查询。
【解决方案2】:

你可以试试这个吗? (X1 和 X2 是你的值)

Select sum(amount) 
from sales 
where 
    (1= CASE WHEN X2>=X1 THEN 1 ELSE 0 END AND DATEFORMAT(created_on, %d) >= X1 and DATEFORMAT(created_on, %d) <=x2)
OR (1= CASE WHEN X2<X1 THEN 1 ELSE 0 END AND ( DATEFORMAT(created_on, %d) >=X1 OR DATEFORMAT(created_on, %d) <=X2))

【讨论】:

    【解决方案3】:

    如果你使用 php 的话。您可以比较最小和最大日期并像这样更改您的查询:

    尝试 #1:

        $min_date = 15;
        $max_date = 25;
    

    尝试 #2:

        $min_date = 28;
        $max_date = 5;
    

    脚本:

        if($min_date < $max_date)
        {
            $query = "Select sum(amount) from sales where DATEFORMAT(created_on, %d) >= $min_date and DATEFORMAT(created_on, %d) <=$max_date";    
        }
        else
        {
            $query = "Select sum(amount) from sales where DATEFORMAT(created_on, %d) >= $min_date OR DATEFORMAT(created_on, %d) <=$max_date"; 
        }
    

    【讨论】:

      【解决方案4】:

      使用它从您的时间戳中仅提取日期,然后将其与您的要求进行比较。

      选择 SUBSTRING(date(CURRENT_TIMESTAMP), 9, 2) , SUBSTRING(date('2017-04-27' ), 9, 2)

      输出:27、27

      干杯!!

      【讨论】:

        猜你喜欢
        • 2014-01-07
        • 2011-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-31
        • 2016-11-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多