平均函数不运行返回NULL - DATETIME

时间:2013-04-10 10:42:52

标签: database sql-server-2005 join

我正在使用sqlserver 2005。

我的表格交易文件包含以下重要列:

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') 

此查询返回null值。

上述查询中的错误是什么?

注意: sauda_date是日期时间,并且有时间和日期,如上面的例子[3/1/2013 9:15:04 AM]所示

请指导我。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

错误是您的where子句过滤掉了所有行,或者Market_Rate始终是NULL。执行以下调试查询以确认:

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