我想要根据日期条件选择记录而不检查月份和年份。
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日的数据等等。
答案 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'
答案 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
干杯!!