2017-04-27 95 views
0

我想根據日期條件選擇記錄而不檢查月份和年份。Mysql日期範圍查詢僅檢查日期而不檢查月份和年份

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

如果我選擇日期15月至25月,然後,我需要25個月,15 - 3月15日至四月記錄到25個月等..

似乎從日期提取一天,它與

Select sum(amount) from sales where DATEFORMAT(created_on, %d) >= 15 and DATEFORMAT(created_on, %d) <=25 

但如何比較發現記錄時,我選擇日期28月至5月比較方便的,那麼我就需要5 - 3月28日二月的數據,28- 1月至5月...等等

+0

在這種情況下,你無法在沒有月份的情況下檢查它:) – Goikiu

+0

@Goikiu 2月28日,1月28日等數據如何? –

+0

我認爲如果不使用完整的日期,就無法實現這一點。然而,使用完整日期將與您所詢問的不同;) – Goikiu

回答

0

您可以使用SQL BETWEEN操作

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

來源SQL Between Operator

+0

op要求一個解決方案沒有年月檢查。 – Goikiu

+0

您還在比較月份... 2月28日至3月5日,1月28日至2月5日等數據如何? –

+0

你不能僅使用MySQL來實現這一點。 您可以通過PHP循環來獲得總和。獲取您想要的具體日期,並且您可以在完成後處理結果。您仍然可以在查詢中使用此SQL查詢。 –

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)) 
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

使用它從你的時間戳中只提取日期,然後與你的需求進行比較。

選擇SUBSTRING(日期(CURRENT_TIMESTAMP),9,2),SUBSTRING(日期( '2017年4月27日'),9,2)

OUTPUT:27,27

乾杯!