如何在两个日期之间验证DATETIME

And*_*wer 2 sql validation datetime

我试图检查优惠券在两个给定日期之间是否有效.
我没有太多的SQL经验,但目前代码正在BETWEEN尝试验证,我遇到的问题是endDate在前一天的午夜到期(例如,10/12/2012 00:00:00.000评估到午夜10/11),我需要它延伸到午夜10/12.
所以我想知道23:59:59在结束日期附加/添加是否是执行此评估的最佳方式?

目前使用:

ca.CreateDate between co.StartDate and co.EndDate 
Run Code Online (Sandbox Code Playgroud)

Mat*_*lie 5

不要BETWEEN用于连续变化的值.

你需要...

    ca.CreateDate >= co.StartDate
AND ca.CreateDate <  co.EndDate
Run Code Online (Sandbox Code Playgroud)

但您还需要在结束日期值中添加一天.在代码(co.EndDate + 1或类似)中,或在它自己的数据中.

例如,如果您想要2012年第一周的所有时间......

WHERE
      theDateTime >= '01 Jan 2012'
  AND theDateTime <  '08 Jan 2012'
Run Code Online (Sandbox Code Playgroud)

这甚至适用于其他级别的粒度.

-- First 12 hours of the day
WHERE
      theDateTime >= '01 Jan 2012 00:00'
  AND theDateTime <  '01 Jan 2012 12:00'

-- All of Jan
WHERE
      theDateTime >= '01 Jan 2012'
  AND theDateTime <  '01 Feb 2012'
Run Code Online (Sandbox Code Playgroud)

  • `''2012年2月01日''包括1月的每一刻.甚至高达`23:59:59.9999999999999999999999999999999999999999`.这就是重点,它的分辨率并不取决于你定义边界的准确程度.如果将"BETWEEN"的边界定义为最接近的分钟,则会错过它之后的秒数.如果将其定义为秒,则会错过它后面的毫秒数.使用`<`是完全准确的,你甚至不必考虑解决方案了. (3认同)