【发布时间】:2021-08-16 20:24:26
【问题描述】:
SQL中按当月过滤数据的方式有两种:
(DATEDIFF(MONTH, RecordDate, GETDATE())) = 0
和
RecordDate BETWEEN DATEADD(DAY, 1, EOMONTH(GETDATE(), -1)) and EOMONTH(GetDate())
他们之间有什么大的不同吗? 在我看来,会为每一行计算 DATEDIFF,所以这应该会严重影响性能,但在做了一些测试之后,在我看来它几乎等同于 secong 选项。
这两个过滤器是否有其他替代品?
【问题讨论】:
-
第一种方法不是过滤。它只是计算一个值。 . .而在 SQL Server 中会产生错误。
-
您使用的是哪个 dbms?所有这些功能都是特定于产品的。
-
@GordonLinoff 第一种方法是计算 datediff 并将其与 0 进行比较,因此这可能是一个过滤器
标签: sql performance date filter