如何把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怎么写呀。
...全文
134 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过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'))
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2015-10-20 03:51
社区公告
暂无公告