gpt4 book ai didi

sql-server - 等效于 GETDATE() BETWEEN 两个日期时间字段,其中两者都可以为 NULL

转载 作者:行者123 更新时间:2023-12-04 08:54:55 26 4
gpt4 key购买 nike


SELECT [Id]
,[DateOnline] --Nullable
,[DateOffline] --Nullable
,[PageId]
,[DownloadId]
,[Weight]
FROM [DownloadPage]
WHERE GETDATE() BETWEEN [DateOnline] AND [DateOffline]

相当于:
SELECT [Id]
,[DateOnline] --Nullable
,[DateOffline] --Nullable
,[PageId]
,[DownloadId]
,[Weight]
FROM [DownloadPage]
WHERE ([DateOnline] IS NULL OR [DateOnline] <= GETDATE())
AND ([DateOffline] IS NULL OR [DateOffline] > GETDATE())

但也迎合了NULL?

或者有更优雅的方法吗?

这里哪里需要括号?

谢谢。

编辑:

[DateOnline] 和 [DateOffline] 都是 DateTime 类型

如果 [DateOnline] 为 NULL,则逻辑为“现在在线”

如果 [DateOffline] 为 NULL,则逻辑为“永不脱机(一旦联机)”

抱歉,我应该首先将其包含在我的问题中。

最佳答案

即使这些列上没有索引,作者的第二个查询也会获得更好的性能。如果有索引,那就不用考虑了……使用合并将禁用索引并执行表扫描而不是索引查找(对性能非常不利)。

即使这些列上没有任何索引,“is null”也会返回一个常量......而在 coalesce 函数的情况下,每次仍然需要评估 NULL 值。如果你有一个满是 NULL DateOnline 和 DateOffline 的表,这个性能泄漏是不能忽略的。

无论如何,我想不出在这种情况下为什么要使用合并的原因。

另外,我猜(因为您正在检查日期范围)这两个日期要么全有要么全无。您可能只需要检查这些日期之一。

 WHERE ([DateOnline] IS NULL)
OR GETDATE() BETWEEN [DateOnline] AND [DateOffline]

关于sql-server - 等效于 GETDATE() BETWEEN 两个日期时间字段,其中两者都可以为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11216188/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com