我正在使用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]所示
请指导我。
答案 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。
编辑:已删除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')