日期选择查询选择明天的值

时间:2019-02-14 21:39:51

标签: sql sql-server-2014

我有一个查询:

SELECT *
  FROM [PivotedData15]
  where ReadingDate BETWEEN '2019-02-11 00:01:00' AND  '2019-02-12 00:00:00'
  and Serial='2219'

它将带回明天的第12个值,而不是第11个和第12个之间的值。

在阅读结束时,我必须在第二天的11日午夜(在午夜,因为这是当天的有效阅读)。

我想理解为什么,此查询带回明天的值,这引出了使用between> <等的意义所在的问题。

之间的语句中的所有日期是否必须都在同一天? 是因为最后的数据集中有明天的值,它是否带回明天的值?

我已经在下拉框中添加了一个文件,其输出名为Data。我无法使SQL Fiddle工作。

Dropbox for code and results

1 个答案:

答案 0 :(得分:5)

assertFalse( SampleEnum.A.getRange().anyMatch( i -> i == 0) ); assertTrue( SampleEnum.A.getRange().anyMatch( i -> i == 1) ); assertFalse( SampleEnum.A.getRange().anyMatch( i -> i == 2) ); assertFalse( SampleEnum.C.getRange().anyMatch( i -> i == 2) ); assertTrue( SampleEnum.C.getRange().anyMatch( i -> i == 3) ); assertFalse( SampleEnum.C.getRange().anyMatch( i -> i == 4) ); assertFalse( SampleEnum.E.getRange().anyMatch( i -> i == 4) ); assertTrue( SampleEnum.E.getRange().anyMatch( i -> i == 5) ); assertTrue( SampleEnum.E.getRange().anyMatch( i -> i == 100) ); assertFalse( SampleEnum.E.getRange().anyMatch( i -> i == 101) ); 包含在内。想必您想要:

BETWEEN

根据您的描述,我不清楚这些比较是否正是您所需要的(例如,您要SELECT * FROM [PivotedData15] WHERE ReadingDate >= '2019-02-11' AND ReadingDate < '2019-02-12' AND Serial = '2219'; / >吗?)。但是,与两个端点进行单独比较是可行的方法。

强烈建议您不要将<=与日期/时间值一起使用。亚伦·伯特兰德(Aaron Bertrand)在What do BETWEEN and the devil have in common?主题上有一个很好的博客。