首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在sql server中每天获取特定小时的记录。

在sql server中每天获取特定小时的记录。
EN

Stack Overflow用户
提问于 2016-02-22 12:03:40
回答 3查看 3.5K关注 0票数 0

我要求每天从Server中提取特定时间的记录,比如下午4时

所以,如果我今天下午3点运行查询,它应该从前一天下午4点的到今天下午3点(23小时)的中提取记录。

另一方面,如果今天下午4:30运行查询,则应该将查询从今天的下午4:30拉到下午4:30的(只运行半个小时)等等。

如何在Server中的普通SQL中执行此操作?

EN

回答 3

Stack Overflow用户

发布于 2016-02-22 13:45:02

我会这样做:

代码语言:javascript
复制
SELECT *
FROM TableName
WHERE ColumnName <= GETDATE()
AND ColumnName >= 
    CASE WHEN DATEPART(HOUR, GETDATE()) < 4 THEN 
        DATEADD(HH, 4, CAST(CAST(GETDATE()-1 AS date) AS datetime)) 
    ELSE  
        DATEADD(HH, 4, CAST(CAST(GETDATE() AS date) AS datetime)) 
    END

兴趣点:

  1. CAST(GETDATE() AS date)将返回当前日期时间的日期部分。
  2. 返回日期时间允许您使用DateAdd获取您想要的时间
  3. 使用带有日期值的-1从日期减去一天(当然,+1会添加一天)
  4. 使用CASE...WHEN,您可以编写一个where子句,适用于问题中描述的两种场景。
票数 1
EN

Stack Overflow用户

发布于 2016-02-22 12:15:39

请尝试以下查询,我已经为在特定日期修改的存储过程创建了该查询:

代码语言:javascript
复制
Select * from sys.procedures where CONVERT(date,modify_date,101) = 
CONVERT(date,DATEADD(DD,-5, GETDATE()),101)
AND DATEPART(hh,modify_date) >= 1 AND DATEPART(hh,modify_date) <= 22 

您可以将“转换(date,DATEADD(DD,-5,GETDATE(),101)”只传递到-减去5天,这只是为了为我获取记录。

在几个小时内,您可以指定您想要的范围。

希望这对你有用。

票数 0
EN

Stack Overflow用户

发布于 2016-02-22 12:23:42

我觉得这可能对你有帮助

代码语言:javascript
复制
select 1 from table where Col1 between case when hour(getdate())>4 then  convert(datetime,convert(varchar(20),year(getdate()))+'-'+convert(varchar(20),month(getdate()))+'-'+convert(varchar(20),day(getdate()))+' 04:00')  else dateadd(hh,-23,getdate())  end and getdate()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35553149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档