如何把8点到8点按一天计算

zhlxyzb 2015-10-20 03:51:20
企业是两班倒的,早八点上到晚八点是早班,反之为夜班。现在想把某个月的记录提取出来,如何提取。

现语句:select * from table1 where year(adddate)= year(@cdate) and month(adddate)=month(@cdate)

这样的的语句就会把 @cdate 这个月的所有记录找了出来,而1号的早8点之前是不能算到这个月的,而下个月1号的早8点前的数据应算入本月。这样的sql怎么写呀。
...全文
224 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2015-10-20
  • 打赏
  • 举报
回复
DECLARE @cdate datetime
SET @cdate = GETDATE()

-- 算出日期范围
DECLARE @startDate datetime
DECLARE @endDate datetime
SET @startDate = CONVERT(datetime,
CONVERT(varchar(7),@cdate,120)+'-01 08:00',
120)
SET @endDate = DATEADD(month,1,@startDate)
--SELECT @startDate, @endDate

-- 用范围查找可以利用索引
SELECT *
FROM table1
WHERE adddate >= @startDate
AND adddate < @endDate

@startDate              @endDate
----------------------- -----------------------
2015-10-01 08:00:00.000 2015-11-01 08:00:00.000
qq_17482963 2015-10-20
  • 打赏
  • 举报
回复
select * from table1 where adddate between dateadd(HH,8,CONVERT(nvarchar(7),@cdate,23)+'-01') and dateadd(MM,1,dateadd(HH,8,CONVERT(nvarchar(7),@cdate,23)+'-01'))
qq_17482963 2015-10-20
  • 打赏
  • 举报
回复
select * from table1 where  year(adddate)= year(@cdate)  and  month(adddate)=month(@cdate) and adddate between dateadd(HH,8,CONVERT(nvarchar(7),getdate(),23)+'-01') and dateadd(MM,1,dateadd(HH,8,CONVERT(nvarchar(7),getdate(),23)+'-01'))

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧