【问题标题】:average function not operating returning NULL - DATETIME平均函数未运行返回 NULL - DATETIME
【发布时间】:2013-04-10 10:42:51
【问题描述】:

我使用的是 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') 

这个查询返回空值。

上面的查询有什么错误?

注意: sauda_date 是日期时间,同时具有时间和日期,如上例所示 [3/1/2013 9:15:04 AM]

请指导我。

【问题讨论】:

    标签: database sql-server-2005 join


    【解决方案1】:
    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

    【讨论】:

    • 不,无论哪种方式都不起作用,我是否应该添加类似 CONVERT(DATE, '03/21/2013',101) 的内容来回答???
    • @Freelancer 我相信添加101 应该没关系,因为您在两者上调用相同的函数,并且输出是DATE,它不应该存储格式信息。 Here's a test that works。它可以帮助识别应该匹配的单行并尝试找出不匹配的原因。
    • 是的,在演示它的工作时,我使用日期时间代替 DATE,因为我使用的是 sqlserver 2005。
    • 我尝试编辑您的查询并且它适用于:CONVERT(varchar(11), Sauda_Date) = CONVERT(datetime, '03/21/2013')
    • 只需使用 CONVERT(varchar(11), Sauda_Date) = CONVERT(datetime, '03/21/2013') 编辑您的答案,我会将其标记为答案。
    【解决方案2】:

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

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

    【讨论】:

    • 否,此查询返回 0 行,当我从中删除 Sauda_Date 时,只有它返回结果。
    • 你为什么说“不”?你是什​​么意思?看起来你发现了问题?!
    • 不,我想说,查询没有运行,抱歉,英语不是我的主要语言,这就是为什么句子结构中可能存在一些错误。不要误会。
    • Np。所以查询没有返回任何行——那么 AVG 也只能返回 NULL。你不同意吗?零行的 AVG 为 NULL。
    • 是的,但我可以在我的数据库中清楚地看到它应该返回 4 个不同 Marketrates 的平均值。
    猜你喜欢
    • 2021-02-13
    • 2020-02-29
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    相关资源
    最近更新 更多