首页 > 解决方案 > 查询之间的 T-SQL 日期

问题描述

T-SQL(2005)中从 X 日期到今天获取结果的最有效方法是什么?

属性是RegistrationDate并且是日期/时间格式,例如Monday, July 15, 2019 12:00 AM

我正在寻找RegistrationDate从 8 月 20 日到今天的记录,因为这个查询每天都会运行。

当前查询在此要求方面存在一些问题:

cast(a.RegistrationDate as date) = cast(GETDATE() BETWEEN '2019-20-10 00:00:00.0' and GETDATE() as date)

标签: tsqlsql-server-2005

解决方案


SQL Server 2005 早就不支持了,你为什么还在使用它?如果您确实仍在使用 SQL Server 2005,那么您升级的时间已经过去很久了,您确实需要尽快查看升级路径。没有受支持的 SQL Server 版本支持从 2005 升级;最新版本是 2014,仅提供扩展支持。

但是,对于您要问的内容,除了明显的语法错误外,该date数据类型在诸如旧版本的 SQL Server 中不存在。因此,最好的方法是使用 useDATEADDDATEDIFF。我还假设您的陈述“是日期/时间格式,例如Monday, July 15, 2019 12:00 AM是错误的;datetime数据类型没有格式。

尽我所能(如果我不得不)做以下事情:

DECLARE @DateStart = '20190101',--First date in range
        @DateEnd = '20200101'; --First date outside of range

SELECT ...
FROM ...
WHERE DateTimeColumn >= @DateStart
  AND DateTimeColumn < @DateEnd;

如果你想GETDATE()开始(当前)一天,那么你会这样做:

DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)

推荐阅读