Php Mysql日期范围查询仅检查日期,不检查月份和年份

Php Mysql日期范围查询仅检查日期,不检查月份和年份,php,mysql,date,date-range,Php,Mysql,Date,Date Range,我只希望根据日期条件选择记录,而不检查月份和年份 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

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

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日的数据。。依此类推

您可以在运算符之间使用SQL

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

来源你能试试这个吗?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))

如果您使用的是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"; 
    }
使用此选项仅从时间戳中提取日期,然后将其与您的需求进行比较

选择SUBSTRINGdateCURRENT_时间戳,9,2,SUBSTRINGdate'2017-04-27',9,2

产出:27、27


干杯

在这种情况下,如果没有月份,您就无法进行检查:@Goikiu 2月28日、1月28日等的数据如何?我认为如果不使用完整日期,您无法实现这一点。但是,使用完整日期与您要求的日期不同;查看op要求的解决方案,无需年检和月检。您也在比较月。。。2月28日至3月5日、1月28日至2月5日的数据如何?仅使用MySQL无法实现这一点。您可以通过在PHP中循环来获得总和。得到你想要的具体日期,一旦完成,你就可以处理结果。您仍然可以在查询中使用此SQL查询tho。