2017-08-01 127 views
1

我有這個疑問:我的SQL Server查詢無法返回預期的結果

select 
Receptions.SubmitDatetime as SubmitReceptionDatetime 
,Receptions.ExpirePetrolDatetime as ExpireDatetime 
    from Receptions 

結果:

enter image description here

但我想找到我的結果作爲你的具體日期可以看到:

select 
Receptions.SubmitDatetime as SubmitReceptionDatetime 
,Receptions.ExpirePetrolDatetime as ExpireDatetime 
    from Receptions 
where 

    (Receptions.SubmitDatetime >=CONVERT(datetime,'8-1-2017')) 
and (Receptions.SubmitDatetime <=CONVERT(datetime,'8-1-2017')) 
order by Receptions.id desc 

但是它不返回任何記錄爲什麼?

+1

可能的日期格式日 - 月 - 年 - 月 - 日 - 年 - 年。嘗試使用'Receptions.SubmitDatetime> ='20170801'' – lad2025

+0

嘗試運行'SELECT CONVERT(datetime,'8-1-2017')'並查看它是否會返回您期望的值 - 麻煩的是您選擇了模糊的日期格式這可以解釋爲1月8日或8月1日。嘗試提供通用的'YYYYMMDD'格式? – Bridge

+0

@Bridge查詢返回2017-08-01 00:00:00.000 –

回答

4

試着用部分時間:

select 
Receptions.SubmitDatetime as SubmitReceptionDatetime 
,Receptions.ExpirePetrolDatetime as ExpireDatetime 
    from Receptions 
where 

    (Receptions.SubmitDatetime >= '2017-08-01T00:00:00' 
and (Receptions.SubmitDatetime <='2017-08-01T23:59:59') 
order by Receptions.id desc 

你origial查詢等效於:

Receptions.SubmitDatetime = '2017-08-01T00:00:00' 
+0

謝謝你的作品,但我不想包含時間到我的查詢 –

2

的問題是,當你將字符串轉換爲日期時間,時間是午夜。請參閱MS Docs

因此,您在8月1日午夜之前和之後要求提供記錄。那些不存在。

假設你想爲8月8日記錄:

select 
Receptions.SubmitDatetime as SubmitReceptionDatetime 
,Receptions.ExpirePetrolDatetime as ExpireDatetime 
    from Receptions 
where 

    (Receptions.SubmitDatetime >=CONVERT(datetime,'8-1-2017')) 
and (Receptions.SubmitDatetime <=CONVERT(datetime,'9-1-2017')) 
order by Receptions.id desc 
1

試試這個;

select 
Receptions.SubmitDatetime as SubmitReceptionDatetime 
,Receptions.ExpirePetrolDatetime as ExpireDatetime 
    from Receptions 
where 
convert(varchar(8),Receptions.SubmitDatetime,112)='20170801' 
order by Receptions.id desc 

您的'Receptions.SubmitDatetime'包含時間,因此您需要將其轉換回日期,如上例所示。

+2

此方法的一個缺點是此表達式轉換(varchar(8),Receptions.SubmitDatetime,112)='20170801''不是SARG能夠。 – lad2025

+1

優秀點@ lad2025 – JPF