首页 > 解决方案 > 在 SSMS 中,我如何使用 DATEADD 函数来获取 '2018-09-01 00:00:00.000' 和 '2018-09-01 023:59:00.000' 之间的所有值

问题描述

我正在使用 SQL Server Management Studio 2014 并尝试编写一个查询来获取订单的所有具有下一天日期的值我不想硬编码日期的 between 子句并希望使用 DateAdd 或类似的函数在不改变语法的情况下始终如一地工作。下面是硬编码查询的示例。

SELECT OrderId
FROM [XXXX].[dbo].[INBOUNDORDHEADER]
between '2018-09-01 00:00:00.000' and '2018-09-01 023:59:00.000'

使用 DATEADD 或类似函数编写语法的最佳方法是什么?

有没有办法我不能区分检索值的时间?例如,只需使用 2018-09-01 提取所有内容,而不是根据时间格式排除记录

我可以使用 AddDate 和 between 来完成这个吗?

标签: sql-servertsql

解决方案


使WHERE子句SARGABLE使其可以从索引中受益可以大大提高性能。最好不要试图获得一天中的“最后”时间,只需使用半开间隔

declare @Today as DateTime = Cast( GetDate() ); -- Strip the time-of-day.

select OrderId
  from [XXXX].[dbo].[INBOUNDORDHEADER]
  where DateAdd( day, 1, @Today ) <= OrderDate and OrderDate < DateAdd( day, 2, @Today );

推荐阅读