SQL DateDifference in a where clause

后端 未结 3 1639
耶瑟儿~
耶瑟儿~ 2020-12-28 19:16

I m doing a query as follows:

SELECT
  *
FROM a
WHERE DATEDIFF(D, a.DateValue, DateTimeNow) < 3;

相关标签:
3条回答
  • 2020-12-28 19:31

    Your query doesn't seem to bad. Another way to tackle it would be:

    SELECT * FROM a WHERE a.DateValue > DATEADD(dd,-3,GETDATE())
    
    0 讨论(0)
  • 2020-12-28 19:40

    Microsoft's documentation at http://msdn.microsoft.com/en-us/library/aa258269%28v=sql.80%29.aspx suggests that instead of DateTimeNow you should have getdate(). Does it work any better that way?

    0 讨论(0)
  • 2020-12-28 19:44

    DateDiff is extremely fast... Your problem is you are running it on the database table column value, so the query processor must run the function on every row in the table, even if there was an index on this column. This means it has to load the entire table from disk.

    Instead, use the dateAdd function on todays date, and compare the database table column to the result of that single calculation. Now it only runs DateAdd() once, and it can use an index (if one exists), to only load the rows that match the predicate criterion.

    Where a.DateValue > DateAdd(day,-3,getdate())

    doing this in this way makes your query predicate SARG-able

    0 讨论(0)
提交回复
热议问题