当前位置:  开发笔记 > 数据库 > 正文

SubSelect上带有MILLISECONDS的SQL DATEDIFF

如何解决《SubSelect上带有MILLISECONDS的SQLDATEDIFF》经验,为你挑选了1个好方法。

我不知道为什么你不能使用DATEDIFFMILLISECONDS在子查询中.

SELECT *
FROM (
    SELECT *
    FROM vrghmdemo.dbo.xrmQueues
    WHERE DATEDIFF(DAY, CreateDateTime, GETDATE()) < 2
) sub
WHERE DATEDIFF(MS, CreateDateTime, GETDATE()) < 500

这导致(德语):

Meldung 535:Die datediff-FunktionführtezueinemÜberlauf.Die Anzahl von datepart-Werten,die zwei Datums-/Uhrzeitinstanzen trennen,istzugroß.

(英文对等):

日期函数导致溢出.分隔两个日期/时间实例的日期部分数量太大.尝试使用具有不太精确的日期部分的datediff.

如果我WHERE再次在SubSelect之外使用相同的条件,它就可以工作.

SELECT *
FROM (
    SELECT *
    FROM vrghmdemo.dbo.xrmQueues
    WHERE DATEDIFF(DAY, CreateDateTime, GETDATE()) < 2
) sub
WHERE DATEDIFF(DAY, CreateDateTime, GETDATE()) < 2
    AND DATEDIFF(MS, CreateDateTime, GETDATE()) < 500

为什么会这样?条件已在SubSelect中使用.



1> Damien_The_U..:

而不是计算一个DATEDIFF毫秒,而是更改目标进行比较:

select * from vrghmdemo.dbo.xrmQueues
where DATEADD(millisecond, -500, GetDate()) <= CreatedDateTime

其中,也可以使用索引(CreatedDateTime如果存在这样的索引,则允许使用索引).


出错的原因是SQL Server自由地将计算移动到最有效计算的位置.在这种情况下,它决定将外部DATEDIFF计算评估为扫描基表,并在它考虑子查询中的谓词之前.

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有