2013-04-10 25 views
0

我使用SQLSERVER 2005平均功能不工作返回NULL - DATETIME

我有以下重要列的表tradefile:

Scrip_Code : nvarchar(25) 
Sauda_Date : datetime [value example: 3/1/2013 9:15:04 AM] 
TradeType : nvarchar(5) 
Market_Rate: float 

我想採取平均市場利率的特定sauda_date ,scrip_code和tradetype。

對於我解僱以下查詢:

select avg(Market_Rate) 
from tradefile 
where 
Scrip_Code='ACC' and 
Sauda_Date =convert(datetime,'03/21/2013') 

該查詢返回我空值。

上述查詢中的錯誤是什麼?

注: sauda_date是datetime和具有如上exmple [2013年3月上午09時15分04秒]

請我的GUID既顯示時間和日期。

回答

2
SELECT CONVERT(DATETIME,'03/21/2013') 

如果你運行上面,它會打印:

2013-03-21 00:00:00.000 

所以你想與時間匹配這個東西:

2013-03-21 09:15:04.123 

它顯然不符合。

您需要將兩者都轉換爲DATE。

Sauda_Date >= CONVERT(DATETIME, '03/21/2013') AND 
Sauda_Date < DATEADD(dd, 1, CONVERT(DATETIME, '03/21/2013')) 

this answer派生。

Test

編輯:刪除CONVERT(DATE, Sauda_Date)方法,因爲DATE沒有在SQL Server 2005中定義,因爲它might be a bad idea

+0

nope不工作,在任何一種方式中,我應該添加一些像CONVERT(DATE,'03/21/2013',101)來回答? – Freelancer 2013-04-10 11:08:15

+0

@Freelancer我相信加上'101'應該不重要,因爲你在兩者上都調用了相同的函數,輸出是'DATE',它不應該存儲格式化信息。 [這是一個可行的測試](http://www.sqlfiddle.com/#!6/55eed/1)。它可以幫助識別*應該*匹配的單個行,並試圖找出它爲什麼不匹配。 – Dukeling 2013-04-10 11:19:46

+0

是的,演示它的工作,以代替DATE我使用datetime自im與sqlserver 2005. – Freelancer 2013-04-10 11:24:15

0

錯誤在於你的where子句過濾掉了所有行,或者說Market_Rate總是NULL。執行以下調試查詢確認:

select * --debug 
from tradefile 
where 
Scrip_Code='ACC' and 
Sauda_Date =convert(datetime,'03/21/2013') 
+0

沒有這個查詢返回0行,當我從那裏刪除Sauda_Date然後只有它返回結果。 – Freelancer 2013-04-10 10:47:18

+0

市場價格具有浮動價值。 – Freelancer 2013-04-10 10:49:57

+0

你爲什麼說「不」?你是什​​麼意思?看起來你發現了這個問題?! – usr 2013-04-10 10:51:41