将 datetime 与 varchar 进行比较的最有效方法
Most efficient way to compare datetime to varchar
我正在使用第三方 Microsoft SQL 服务器数据库,其中大多数日期以 yyyy_MM_dd hh:mm:ss.SSS
格式保存为 varchar
列。在很多报告中,我需要 select 由两个日期时间变量定义的特定时间范围。我正在使用以下语句:
where cast(replace(a.somedate,'_','-') as datetime) between @begin and @end
我注意到使用此语句时,当需要处理大量记录时,查询会很快变得昂贵。将 varchar 与 datetime 进行比较的最有效方法是什么?
由于这是一个供应商应用程序,您无法控制架构,因此您可以重构 WHERE clause
以获取可搜索表达式,如下所示。这将允许有效地使用 somedateas
上的索引。例如:
WHERE a.somedateas BETWEEN REPLACE(CONVERT(varchar(19), @begin, 120), '-', '_') AND REPLACE(CONVERT(varchar(19), @end, 120), '-', '_')
我正在使用第三方 Microsoft SQL 服务器数据库,其中大多数日期以 yyyy_MM_dd hh:mm:ss.SSS
格式保存为 varchar
列。在很多报告中,我需要 select 由两个日期时间变量定义的特定时间范围。我正在使用以下语句:
where cast(replace(a.somedate,'_','-') as datetime) between @begin and @end
我注意到使用此语句时,当需要处理大量记录时,查询会很快变得昂贵。将 varchar 与 datetime 进行比较的最有效方法是什么?
由于这是一个供应商应用程序,您无法控制架构,因此您可以重构 WHERE clause
以获取可搜索表达式,如下所示。这将允许有效地使用 somedateas
上的索引。例如:
WHERE a.somedateas BETWEEN REPLACE(CONVERT(varchar(19), @begin, 120), '-', '_') AND REPLACE(CONVERT(varchar(19), @end, 120), '-', '_')