2017-10-09 46 views
0

我寫了一個查詢,它返回的日期實際上比上述日期更早。爲什麼我的查詢返回不符合where子句條件的記錄?

Declare @DateFrom date 
Set @DateFrom= '02/Oct/2019' 

SELECT 1, Convert(varchar(11), AppliedDateTime, 106) 
FROM [MC_Tenders].[dbo].[AppliedWorks] 
Where 
Convert(varchar, AppliedDateTime,106) >= Convert(varchar, @DateFrom,106) 

將應用日期保存在表中作爲日期時間,例如, 2017-04-25 15:51:25.257

回答

5

您正在做比較字符串而不是日期。刪除轉換:

SELECT 1, Convert(varchar(11), AppliedDateTime, 106) 
FROM [MC_Tenders].[dbo].[AppliedWorks] 
WHERE AppliedDateTime >= @DateFrom; 

106型是dd mm yyyy。當你比較字符串時,比較字符串,而不是日期。使用格式106,首先比較,因此:'18-10-2017' < '25-12-1900'因爲「1」<「2」。

0

只是爲了完成戈登·利諾夫的思想,你的代碼應該是這個樣子:

SELECT 
    1 
    , CAST(AppliedDateTime AS DATE) AS AppliedDate 
FROM 
    [MC_Tenders].[dbo].[AppliedWorks] 
WHERE 
    CAST(AppliedDateTime AS DATE) >= @DateFrom; 

編輯:我假設AppliedDateTime實際存儲爲日期時間,或於DATE其他一些數據類型。對DATE類型的顯式CAST將刪除時間組件,並允許SQL將日期組件與您的變量進行比較。

+0

對於'> ='比較,不需要將'datetime'強制轉換爲'date'。 –

+0

一個公平的批評,但OP沒有說如何存儲AppliedDateTime。即使字段是字符串,顯式的轉換也會(通常)起作用。 –

相關問題