sql查询从时间段拆分日期部分

时间:2013-10-28 21:05:45

标签: sql sql-server

我想从命中表中获取最后一天的结果。 最后一天意味着如果我在2013年10月28日上午7点运行查询,它应该返回之间的结果 00h:27/10/2013和24h:27/10/2013。

这是我的查询:

SELECT  COUNT(ID) FROM [tblHit] AS V WHERE  HitDate between
DATEADD(day, -1, convert(date, GETDATE()))  and  convert(date, GETDATE())  

此查询是否获得结果?

唯一困扰我的是,如果我在

之间进行检查
convert(date, GETDATE())

小时也包括在内,结果出错了。

3 个答案:

答案 0 :(得分:2)

SELECT ...
FROM ...
WHERE HitDate >= DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE())-1, 0) -- Start of the previous day
AND HitDate < DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0) -- Start of the current day

答案 1 :(得分:2)

Declare @Yesterday date = DateAdd(day, -1, Getdate())

SELECT  COUNT(ID) FROM [tblHit] AS V 
WHERE  HitDate >= @Yesterday and HitDate < DateAdd(day, 1, @Yesterday)

答案 2 :(得分:-1)

我不确定你在'最后一天'的意思

如果您的意思是想要为昨天选择记录,那么您可以

 Select *
 From tblHit
 Where cast(hit_date as date) = dateadd(d, -1, cast(getdate() as date))

如果您的意思是想要最新一天的记录,那么您可以使用DENSE_RANK()

Select *
From (
    Select *,  dense_rank() over (order by cast(hit_date as date) desc) dr
    From tblHit
) t
Where dr=1

如果您的意思是想要第二天的最新记录,那么再次使用DENSE_RANK()只需稍微更改标准

Select *
From (
    Select *,  dense_rank() over (order by cast(hit_date as date) desc) dr
    From tblHit
) t
Where dr=2