2016-12-05 55 views
1

我有這個簡單的MySQL查詢SQL結果

select * 
from reportings 
where findcampaign = 1 and 
     is_click = 1 and 
     created_at BETWEEN date(2016-11-01) AND date(2016-12-31) 

這將返回所有的行,其中findcampaign = 1和is_click是= 1,其中created_at日期是2016年11月1日和2016年之間-12-31。

運行select * from reportings where findcampaign = 1 and is_click = 1

給了我12行

enter image description here

的圖像顯示,這些reportings都是那些日期間,所以我應該有12行。這是從數據庫中獲取日期和日期的正確方法,即使我的created_at具有時間戳值。或者我需要在日期上添加時間?

+1

嘗試'之間的「2016年11月1日」與「2016-12-31''注單引號 – RiggsFolly

+2

2016-11-01是* 2004 * - 減去3個整數,如果是日期字符串,則引用它。 –

+0

嘗試在單引號之間加上日期,比如'date('2016-11-01')'(另一個相同)。 – FDavidov

回答

3

你應該把報價日期

select * 
from reportings 
where findcampaign = 1 and 
     is_click = 1 and 
     created_at BETWEEN date('2016-11-01') AND date('2016-12-31') 
+4

你甚至不需要用'date()'來包裝引用的日期。只需使用'BETWEEN'2016-11-01'和'2016-12-31'' –

+0

@TimBiegeleisen對於字符串它沒關係。但在此提及date(),需要引用它。至少爲MySQL。 –

+0

爲什麼使用'date'函數和參數本身只有日期 – Rahul

1

哎只是有點語法錯誤哥們。日期

需要單倒逗號試試這個

 
select * from reportings where findcampaign = 1 and is_click = 1 and created_at BETWEEN date('2016-11-01') AND date('2016-12-31') 
1

你是問你在哪裏比較日期列與datetime數據謂詞。如上所述,如果您將日期放在單引號中,那麼它應該可以工作,但通常最好更清楚地說明自從BETWEEN開始工作時發生的情況可能會令人困惑。

我建議:

select * 
from reportings 
where findcampaign = 1 and 
     is_click = 1 and 
     created_at >= '2016-11-01 00:00:00' and 
     created_at <= '2016-12-31 00:00:00'; 

這種情況是一樣的一個在您的查詢,並使得它很清楚,2016年12月31日created_at所有值將被排除,從2016-12-31 00:00:01通過2016-12-31 23:59:59

您可能希望包括2016年12月31日,在這種情況下,你會第二日期改爲2017-01-01 00:00:00

+0

而且,我可以看到數據集中沒有31日的12月日期,只是認爲這是一個很好的練習。 – mendosi