我如何显示直到11:59 PM的前一天数据

时间:2018-10-11 09:41:16

标签: sql sql-server sql-server-2014

如何显示前一天的数据,直到11:59 PM或12,

我正在使用 getdate() 运行查询,然后显示当前日期为当前时间 例如

Execution Datetime -2018-10-11 15:08:42.777

但是如果我想要昨天的数据直到晚上11:59或我使用的12   dateadd(day,-1, getdate()), or Getdate()-1 ,它显示的时间完全相同

2018-10-10 15:08:42.777

如何获取前一天的数据,直到11:59 pm

4 个答案:

答案 0 :(得分:1)

我建议:

where col < cast(getdate() as date) and
      col >= dateadd(day, -1, cast(getdate() as date))

如果有合适的索引,则这种表达方式允许SQL Server在col上使用索引。

如果您不关心索引,可以执行以下操作:

where datediff(day, col, getdate) = 1

答案 1 :(得分:0)

您可以尝试以下操作。

WHERE dateField < convert(date, getdate() -1)

答案 2 :(得分:0)

您可以结合使用DATEDIFFDATEADD来获得两个值,一个在昨天的00:00:00,另一个在昨天的23:59:59。无需转换为DATE,速度非常快。

DATEADD(DAY,-1, DATEDIFF(DAY,0,getdate()))昨天给您00:00:00 DATEADD(MILLISECOND,-3,DATEADD(DAY,0, DATEDIFF(DAY,0,getdate())))昨天给您23:59:59.997

在要过滤到昨天的查询的WHERE中,此示例

SELECT *
FROM Sometable
WHERE Sometable.Datecolumn BETWEEN 
 DATEADD(DAY,-1, DATEDIFF(DAY,0,getdate()))  AND DATEADD(MILLISECOND,-3,DATEADD(DAY,0, DATEDIFF(DAY,0,getdate())))

答案 3 :(得分:-1)

您可以将值都强制转换为date,例如:

where cast(dateTimeField as date) =cast(dateadd(day,-1,getdate()) as date)

SQL Server非常聪明,可以将其转换为范围查询:

WHERE dateField >= '2018-10-10 00:00:00' and datefield <'2018-10-11 00:00:00`

这允许服务器使用覆盖dateField的所有索引并执行快速查询。

在任何其他情况下,将函数应用于字段将阻止服务器使用索引

更新

对于怀疑者和不确定者,让我们创建一个包含50K条目的表:

create table TestDates(
    id int primary key identity,
    Name nvarchar(20),
    Created datetime,
    INDEX IX_TestDates_Created(Created)
    );


insert into TestDates(Name,Created)
select FORMAT(n,'John Doe {0}'), dateadd(hour,n,'2017-08-01  16:55:47') 
from Numbers
where n<=50000

这将创建5万个条目,直到2023年,每天有24个条目。

此查询的执行计划:

select count(*),min(created),max(created)
from TestDates
where cast(created as date)=cast(dateadd(day,-1,getdate()) as date)

在索引上显示索引查找,而不是扫描。

enter image description here

索引查找操作的查找谓词是:

Start: [Test].[dbo].[TestDates].Created > Scalar Operator([Expr1012]), 
End:   [Test].[dbo].[TestDates].Created < Scalar Operator([Expr1013])

有结果:

24  2018-10-11 00:55:47.000 2018-10-11 23:55:47.000