Sql 使用带时间的日期从表中选择全部

Sql 使用带时间的日期从表中选择全部,sql,sql-server,Sql,Sql Server,如何获取昨天和前一天23:59的最后记录数据 我的代码还没有时间过滤器,所以它只显示昨天和前一天的所有数据 select * from tbl_Total where date between DATEADD(day, -3, GETDATE()) AND DATEADD(day, -1, GETDATE()) 此查询将返回YesStarDay日期和时间23:59:59 SELECT CAST(CAST(CAST(DATEADD(day, -1, GETDATE()) as DATE) as

如何获取昨天和前一天23:59的最后记录数据

我的代码还没有时间过滤器,所以它只显示昨天和前一天的所有数据

select *
from tbl_Total
where date between  DATEADD(day, -3, GETDATE()) AND DATEADD(day, -1, GETDATE())

此查询将返回YesStarDay日期和时间23:59:59

SELECT CAST(CAST(CAST(DATEADD(day, -1, GETDATE()) as DATE) as varchar(12)) +' 23:59:59' as datetime2)
因此,您可以在查询中使用它:

select *
from tbl_Total
where date between  DATEADD(day, -3, GETDATE()) AND CAST(CAST(CAST(DATEADD(day, -1, GETDATE()) as DATE) as varchar(12)) +' 23:59:59' as datetime2)
编辑:更优雅的方式:

SELECT DATEADD(second, -1, DATEADD(dd, DATEDIFF(dd,0,GETDATE()),0))
此查询返回时间为23:59:59的昨天日期

SELECT CAST(CAST(CAST(DATEADD(day, -1, GETDATE()) as DATE) as varchar(12)) +' 23:59:59' as datetime2)
EDIT2:如果要返回前一天的时间23:59:59,则需要使用以下查询:

SELECT DATEADD(second, -1, DATEADD(dd, DATEDIFF(dd,1,GETDATE()),0))
如果您想在其他任何一天获得,您可以更改数字2并对其进行测试。

在您的情况下

select * from tbl_Total as of timestamp timestamp '2017-07-19 23:59:59'

试试这个

select *
from tbl_Total
where date between  dateadd(day,-3,convert(varchar(10),getdate(),112)) AND dateadd(day,-3,convert(varchar(10),getdate(),112)+ ' 23:59:59:997' )

假设您不知道确切的时间,可以使用ROW_NUMBER获取最新的行:


我还需要在前天的同一时间回来@Rokuto@hikarisakunami时间是00:00:00还是23:59:59?时间是23:59。我能得到时间23:59的最后记录数据吗?@hikarisakunami我已经更新了答案。对不起,我不明白你的问题。你的问题我不清楚。请添加一些示例数据和预期结果。
with cte as
 ( select *,
      row_number() -- for each day sorted descending
      over (partition by DATEADD(dd, DATEDIFF(dd,0,GETDATE()),0)
      order by date desc) as rn
   from tbl_Total
   where -- yesterday between 23:59 and 23:59:99.999
    (     date >= DATEADD(dd, DATEDIFF(dd,0,GETDATE()),0) - (1.0/1440)
      and date <  DATEADD(dd, DATEDIFF(dd,0,GETDATE()),0)
    )
   or    -- day before yesterday between 23:59 and 23:59:99.999
    (     date >= DATEADD(dd, DATEDIFF(dd,1,GETDATE()),0) - (1.0/1440)
      and date <  DATEADD(dd, DATEDIFF(dd,1,GETDATE()),0)
    )
 )
select * from cte
where rn = 1 --latest row only