检查订单仅适用于今天

mho*_*321 0 sql datetime sql-server-2008-r2

我意识到这是一个相对基本的问题,但是日期时间总是搞砸了我,我想确保我正确地做到这一点(这个审计将被提升为老板).使用sql server 2008 r2.下面的一些sudo代码可以满足我的需求

我应该提到transactionDate目前是一个日期时间.这会改变一切吗?

DELCARE 
    @today datetime,
    @tomorrow datetime

SET @today = --CODE TO GET THE DATE FOR TODAY
SET @tomorrow = --CODE TO GET THE DATE FOR TOMORROW

SELECT *
FROM table
WHERE custID = '788'
    AND status = 'Cancelled'
    AND transactionDate --IS ONLY TODAY AND NOT TOMORROW OR ANY DAY AFTER
Run Code Online (Sandbox Code Playgroud)

Aar*_*and 7

如果transactionDateDATETIME,那么:

AND CONVERT(DATE, TransactionDate) = CONVERT(DATE, CURRENT_TIMESTAMP);
Run Code Online (Sandbox Code Playgroud)

如果transactionDateDATE,那么:

AND transactionDate = CONVERT(DATE, CURRENT_TIMESTAMP);
Run Code Online (Sandbox Code Playgroud)

这两个仍将使用索引transactionDate,但这是一个特例.通常第一种形式会破坏sargability.

  • @AaronBertrand...如果你不参考它,我会的.有关SQL Server中日期/日期时间比较的详细博客文章,请访问http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/16/bad-habits-to-kick-mishandling-date-range-queries的.aspx. (2认同)