2

我有一个包含两列的表 - ID 为 int,日期由于某种原因存储为 nvarchar。

最近在 ID 字段上创建了一个非聚集索引。现在在我的查询中,当我将日期从 nvarchar 转换为 date 时,它​​给了我一个“将表达式转换为数据类型 datetime 的算术溢出错误”。例外。

如果我从查询中删除 id 字段,则转换效果很好。同样,如果我从查询中删除日期字段转换,它再次完美运行。如果我删除索引,原始查询将完美运行。

我现在的问题是,为什么 ID 列上的索引会扰乱我认为无关的日期列中的转换?

对此的任何解释都非常感谢。查询是:

select e.date ,e.id as id from dbo.table1 e,dbo.table2 d with (nolock) 
where e.id=d.id and 
convert(datetime,e.date) between convert(datetime,'07/01/2012') 
and convert(datetime,'07/02/2012') group by e.date,e.id 
4

2 回答 2

0

埃特拉斯特81

当我看到您的查询时,我只是建议您使用 temp. 表首先将您的日期 nvarchar 转换为日期时间,然后将其与下一个表连​​接,

我认为它有效

于 2012-07-12T05:02:17.743 回答
0

表中的日期列包含无效的日期值。添加索引和更改返回的列会更改查询的查询计划,因此它会评估无效的日期值。

于 2012-07-12T05:55:59.190 回答