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