gpt4 book ai didi

sql - 在 Microsoft SQL Server 中比较日期的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-01 20:18:27 25 4
gpt4 key购买 nike

我有一个 SQL datetime一个非常大的表中的字段。已建立索引,需要查询。

问题在于 SQL 始终存储时间部分(即使始终是午夜),但搜索是针对当天,而不是时间。

declare @dateVar datetime = '2013-03-11;

select t.[DateColumn]
from MyTable t
where t.[DateColumn] = dateVar;

不会返回任何内容,如 t.[DateColumn]始终包含时间部分。

我的问题是解决这个问题的最佳方法是什么?

似乎有两组主要选项:

  1. 使用 dateadd 创建第二个变量并使用 between ... and>= ... and ... <=

  2. 转换 t.[DateColumn]进入仅日期组件 - 我认为这会导致任何索引被忽略。

这两个看起来都很困惑 - 我真的不想进行范围比较或扫描表格。

有更好的方法吗?

如果这些选项之一始终是最佳方式,那么如何以及为什么?

最佳答案

在任何情况下转换为 DATE 或使用开放式日期范围都会产生最佳性能。仅供引用,使用索引转换为日期是表现最好的。更多测试不同技术的文章:What is the most efficient way to trim time from datetime?发布者:亚伦·伯特兰

摘自该文章:

DECLARE @dateVar datetime = '19700204';

-- Quickest when there is an index on t.[DateColumn],
-- because CONVERT can still use the index.
SELECT t.[DateColumn]
FROM MyTable t
WHERE = CONVERT(DATE, t.[DateColumn]) = CONVERT(DATE, @dateVar);

-- Quicker when there is no index on t.[DateColumn]
DECLARE @dateEnd datetime = DATEADD(DAY, 1, @dateVar);
SELECT t.[DateColumn]
FROM MyTable t
WHERE t.[DateColumn] >= @dateVar AND
t.[DateColumn] < @dateEnd;

同样来自那篇文章:使用 BETWEENDATEDIFFCONVERT(CHAR(8)... 都比较慢。

关于sql - 在 Microsoft SQL Server 中比较日期的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15344661/

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