Я хочу в отдельных записях, основанных только на дате и дате, без проверки месяца и года.
Table structure
------------------------------------
id | user_id | amount | created_on
------------------------------------
Если я выберу дату с 15 апреля по 25 апреля, тогда мне понадобится запись с 15 апреля по 25 апреля, с 15 марта по 25 марта и так далее.
Кажется, довольно просто выбрать день за днем и сравнить его с
Select sum(amount) from sales where DATEFORMAT(created_on, %d) >= 15 and DATEFORMAT(created_on, %d) <=25
Но как найти записи, когда я выбираю дату с 28 марта по 5 апреля, тогда мне нужны данные с 28 февраля по 5 марта, с 28 января по 5 февраля … и так далее
Если вы используете 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";
}
Вы можете использовать SQL между оператором
Select sum(amount) from sales where created_on BETWEEN '2017/03/28' and '2017/04/05'
Источник SQL между оператором
Вы можете попробовать это? (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))
используйте это, чтобы извлечь только дату из вашей временной метки, а затем сравнить ее с вашим требованием.
выберите SUBSTRING (дата (CURRENT_TIMESTAMP), 9, 2), SUBSTRING (дата (‘2017-04-27’), 9, 2)
ВЫХОД: 27, 27
Ура !!