SQL Server:今天不等于今天

时间:2017-07-14 01:06:08

标签: sql sql-server sql-server-2016 getdate

也许我犯了一个明显的错误,但任何人都可以解释这里发生了什么?我正在运行一个查询,其中表的字段是日期时间,我运行的查询类似于

SELECT *
FROM Table
WHERE DateTimeColumn <= '20170714'

我注意到输出排除了DateTimeColumn '20170714' '20170713'DECLARE @d1 DATE = '20170714' SELECT IIF(GETDATE() <= @d1, 'GETDATE() Less than or equal to @d1', 'GETDATE() **NOT** Less than or equal to @d1') DECLARE @d2 DATE = '20170714 11:59:59' SELECT IIF(GETDATE() <= @d2, 'GETDATE() Less than or equal to @d2', 'GETDATE() **NOT** Less than or equal to @d2') DECLARE @tomorrow DATE = '20170715' SELECT IIF(GETDATE() <= @tomorrow, 'GETDATE() Less than or equal to @tomorrow', 'GETDATE() **NOT** Less than or equal to @tomorrow') 完成的记录

下面我期待所有3个IIF都成为现实。

mp

2 个答案:

答案 0 :(得分:0)

使用不到2017-07-15(明天)

private void SelectCourse(string message)

如果想使用getdate,请尝试以下方法:

SELECT *
FROM Table
WHERE DateTimeColumn < '20170715'

使用sargable谓词。不要将数据转换为适合过滤谓词,这会影响索引访问和/或需要不必要的计算。 Here is a former answer on the similar question.

另请注意,23:59:59不是一天的结束,它是整整一天的一整秒:日期时间精确到约3毫秒,而datetime2更敏感。

答案 1 :(得分:-1)

您可以像这样更改查询:

SELECT *
  FROM Table
  WHERE CONVERT(date, DateTimeColumn) <= '20170714'

它将返回少于14的所有记录并记录日期14。