Man*_*265 1 sql-server date where
我正在构建一个 POS 系统,在那里我收集事件发生的日期和时间。我想通过DATE
在我的 SQL 查询中仅使用datetime 列的一部分来提取一些报告。
我当前的查询如下所示:
SELECT * FROM tbl_item_trans
WHERE (date_time BETWEEN @start AND @end)
ORDER BY date_time DESC, code
Run Code Online (Sandbox Code Playgroud)
但是,如果我输入两个日期,例如 9 月 14 日和 15 日,它只会从 14 中提取数据。如果我想包括 9 月 15 日的交易,结束日期必须是 9 月 16 日。
我怎么解决这个问题?如果我只使用专栏的DATE
一部分,那就更好了datetime
。
在@start
与@end
变量使用date
的数据类型,例如“2017年9月16日”。
小智 6
尝试包含开始日期和专有结束日期:
date_time >= @start AND date_time < DATEADD(day, 1, @end)
Run Code Online (Sandbox Code Playgroud)
另请参阅“之间”和“魔鬼”有什么共同点?通过亚伦伯特兰。
如果将查询编写为 use CAST(date_time AS DATE)
,则 Sargability 不会成为问题,因为 SQL Server 将包含一个覆盖搜索谓词的帮助程序。请参阅Rob Farley(在 2010 年在 SQLBits VII 上录制)演示的理解 SARGability(使您的查询运行得更快)。但请注意,转换可能仍会影响基数估计的准确性。
归档时间: |
|
查看次数: |
1660 次 |
最近记录: |