【发布时间】:2015-05-27 11:26:34
【问题描述】:
我在 SQL Server 表上有一个名为 dd 的日期列。
dd
---------------------------
10-01-2015 00:00:00.000
22-05-2015 10:22:32.521
27-05-2015 12:30:48.310
24-12-2014 09:51:11.728
27-05-2015 02:05:40.775
....
我需要检索 dd 值来自过去 24 小时的所有行。
我找到了 3 个过滤选项以获得所需的结果:
1. `dd >= getdate() - 1`
2. `dd >= dateadd(day, -1, getdate())
3. `dateadd(day, 1, dd) >= getdate()
我的问题是:
所有 3 个选项都将检索我需要的所有行吗?
如果有,它们之间有什么区别?
【问题讨论】:
-
#3 是你能做的最糟糕的事情!
-
你看过执行计划了吗?
-
#1 和#2 是相同的,其中#1 只是MS-SQL 对#2 的简写符号。不过我会使用 #2,因为它似乎更清楚地向读者传达了正在添加的单元。
-
“我有一个日期栏...” 不,你没有。
date列不能包含时间组件。您可能有一个datetime列。
标签: sql-server performance datetime query-performance