Sql 使用带时间的日期从表中选择全部
如何获取昨天和前一天23:59的最后记录数据 我的代码还没有时间过滤器,所以它只显示昨天和前一天的所有数据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
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