Sql server 2008 r2 excel上带日期的链接sql server查询的sumifs

Sql server 2008 r2 excel上带日期的链接sql server查询的sumifs,sql-server-2008-r2,excel-formula,Sql Server 2008 R2,Excel Formula,当使用日期列作为条件时,我无法在链接到MS SQL server 2008R2视图的单元格区域上执行sumifs或countifs 如果是在本机表链接上执行的,则它们可以正常工作,但查询似乎以文本形式传递日期,因此 我尝试使用convert格式化查询的输出,但它仍然是文本输出 尝试在excel中的sumifs中使用datevalue函数,但似乎对范围无效 文本函数也是如此 如果没有运行宏进行复制和转换(这有点违背了实时链接的目的),任何人都可以在服务器端或excel端提供解决方案吗 干杯有趣

当使用日期列作为条件时,我无法在链接到MS SQL server 2008R2视图的单元格区域上执行sumifs或countifs

如果是在本机表链接上执行的,则它们可以正常工作,但查询似乎以文本形式传递日期,因此

  • 我尝试使用convert格式化查询的输出,但它仍然是文本输出
  • 尝试在excel中的sumifs中使用datevalue函数,但似乎对范围无效
  • 文本函数也是如此
如果没有运行宏进行复制和转换(这有点违背了实时链接的目的),任何人都可以在服务器端或excel端提供解决方案吗


干杯

有趣的是,Excel无法识别SQL的数据类型
date
。如果希望Excel将其识别为日期,则必须将其转换为
datetime
。因此,如果在查询中使用强制转换将日期字段转换为datetime,则Excel将识别并将其视为datetime

这是因为Excel与2008版后的SQL不同,无法区分日期和时间。 如果您选择在单元格中输入日期并将其格式化,则Excel仍然是
datetime
,如果将该单元格重新格式化为带有时间的日期,您将看到Excel自动假定时间为00:00:00(午夜)。当你只输入一个时间时,同样适用。在这种情况下,Excel将自动假定00.01.1900为基础“日期”。 原因是所有的
datetime
s都以数字形式存储在Excel中。小数点之前的任何内容都是00.01.1900和您希望存储的日期之间的差值,而冒号之后的任何内容都表示一天中的时间。由于任何Excel单元格中的所有数字在冒号前后都可能有一个数字,因此只有
datetime

数字42.000表示1900年1月00日后的42.000天,即2014年12月27日和午夜时间,而数字42.000,75表示一天中75%的时间已经过去:2014年12月27日,0,75*24小时=6PM=18:00:00(军事时间)

多了解一些信息会有帮助的。Excel版本?表中使用的SQL Server数据类型(或查询中使用的数据类型,如果不同)?你到底对datevalue函数做了什么?您是在Excel中还是在SQL中执行这些操作(更改查询以检索数据)?您是使用VBA/ADO(或类似工具)以编程方式从服务器获取数据,还是有一个数据透视表,其中包含链接到SQL的源,还是其他什么?谢谢Ralph。Excel版本为2010;原始数据类型为“日期”;数据是通过“Get External data-from SQL server”从Select语句(带连接)以表的形式获取的,但如上所述,还尝试使用convert子句来绕过它,但问题相同。这就好像查询传递了一个虚拟日期,excel将其读取为文本,但如果它是本机表,excel知道它是一个日期字段,因此可以处理以后的计算。谢谢Ralph-它现在可以工作了,但有趣的是,如果它直接读取本地表,它似乎又能识别“谢谢”。@famethrowa:为了回答您的问题,我对我的答案进行了详细说明:为什么只有Excel中的日期时间。