2017-06-05 243 views
3

有什麼區別

select count(*) 
from `order` 
where marketer_id = 75 and 
     HandleStatus != -1 and 
     (Created_at BETWEEN '2017-05-01' AND '2017-05-31') 

和結果之間

我必須先查詢

我也有第二個查詢:

select count(*) 
from `order` 
where marketer_id = 75 and 
     HandleStatus != -1 and 
     (Month(Created_at) =5 and Year(Created_at) = 2017) 

和結果是

我認爲2查詢hav同樣的意思,但它返回2個不同的結果。 信息有關列 「Created_at」:COLUMN_NAME Created_at,COLUMN_TYPE時間戳,IS_NULLABLE NO,COLUMN_KEY,COLUMN_DEFAULT CURRENT_TIMESTAMP

請幫忙2查詢之間有什麼區別?

+0

運行此查詢'SELECT COUNT(*) 其中marketer_id = 75和 HandleStatus!= -1和(Month(Created_at)= 5和Year(Created_at)= 2017)和 NOT(Created_at BETWEEN'2017-05-01'和'2017-05-31')'看看哪些行被返回。 我的猜測是,有時間戳(不只是日期)在時間戳的行。 – Turophile

+1

避免第一個和最後一個日期 –

+0

每天在這裏學習新東西[** demo **](http://rextester.com/DORB47261)。第一個查詢在午夜使用5月31日,不包括當天的大部分時間。 –

回答

6

如果您考慮一天內的時間,第一個查詢僅在2017-05-31 00:00:00之前返回結果。 如果您在2017-05-31 00:00:00之後以及2017-05-31 23:59:59之前有任何結果(可能也是毫秒),它們只會顯示在第二個查詢中。

1

第一個查詢不在5月31日,它看起來只有5月30日。時間分量的缺失意味着時間被視爲午夜或31日的開始。

0

之間確實只需要'2017-05-30 23:59:59'和之後2017-05-01 00:00:00。它不應該考慮第31個整天。

如果你想第一個查詢返回相同的數據,第二個查詢,你可以從訂單 使用這樣

select count(*) 
from `order` 
where marketer_id = 75 and 
     HandleStatus != -1 and 
     (Created_at >= '2017-05-01' AND Created_at < '2017-06-01')