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

时间:2017-04-27 06:58:45

标签: 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 where DATEFORMAT(created_on, %d) >= 15 and DATEFORMAT(created_on, %d) <=25

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

4 个答案:

答案 0 :(得分:1)

如果你正在使用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"; 
    }

答案 1 :(得分:0)

您可以使用SQL BETWEEN运算符

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

来源SQL Between Operator

答案 2 :(得分:0)

你能试试吗? (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 :(得分:-1)

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

选择SUBSTRING(日期(CURRENT_TIMESTAMP),9,2),SUBSTRING(日期(&#39; 2017-04-27&#39;),9,2)

输出:27,27

干杯!!