重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
select datediff(week,'2008/01/01','2008/02/01')
成都创新互联专注于滨湖企业网站建设,响应式网站开发,购物商城网站建设。滨湖网站建设公司,为滨湖等地区提供建站服务。全流程按需定制网站,专业设计,全程项目跟踪,成都创新互联专业和态度为您提供的服务
试试看,两个日期间的星期数,默认是周日到周六算一周的
不晓得你说的分组是什麼意思
下面的语句取当前日期所在的星期的星期一的日期
select
dateadd(day,
2-datepart(weekday,getdate()),getdate())
根据条件替换getdate(),就可以了
drop function dbo.f_get_workdays
go
CREATE FUNCTION dbo.f_get_workdays(@bdate DATETIME, @edate DATETIME)
RETURNS INTEGER
AS BEGIN
DECLARE @workdays INTEGER
IF @bdate @edate
RETURN -1
SELECT @workdays =
--如果终止日期与起始日期在同一个星期内,只需要计算有几天即可
CASE WHEN DATEPART(wk, @edate-1)-DATEPART(wk,@bdate) = 0 THEN
CASE WHEN DATEPART(dw, @bdate) 5 THEN 0
WHEN DATEPART(dw, @edate-1) 5 THEN 6 - DATEPART(dw, @bdate)
ELSE DATEPART(dw, @edate-1) - DATEPART(dw, @bdate) + 1 END
--如果终止日期与起始日期在不同的星期内
--首先计算出除前后两个星期外完整的星期数 * 5
ELSE (DATEDIFF(dd,@bdate,@edate)
- (8-DATEPART(dw, @bdate))
- DATEPART(dw, @edate-1)) / 7 * 5
--再加上第一个星期里的工作日数
+ CASE WHEN DATEPART(dw, @bdate) 6 THEN 6 - DATEPART(dw, @bdate)
ELSE 0 END
--加上末一个星期里的工作日数
+ CASE WHEN DATEPART(dw, @edate-1)5 THEN 5 ELSE DATEPART(dw, @edate-1) END
END
RETURN @workdays
END
go
select dbo.f_get_workdays(dateadd(day,-21,getdate()),getdate())
---把getdate()替换成你的日期字段就可以了, between and的2个日期分别是你说的2个年头年尾的情况
select case when getdate()=cast('2014/1/1' as datetime) then datepart(week,getdate()) else 1 end as 第几周
--from table_name
where getdate() between (case when datepart(weekday,cast('2014/1/1' as datetime))1 then
cast('2014/1/1' as datetime)-datepart(weekday,cast('2014/1/1' as datetime))+2
end )
and
(case when datepart(weekday,cast('2014/12/31' as datetime))6 then
cast('2014/12/31' as datetime)-datepart(weekday,cast('2014/12/31' as datetime))+1
end )
就三个字段(内容,创建日期,标志)
插入数据时标志初始为0,代表未提醒
定时扫描该表,
假设创建日期为2011-01-15
datediff(day,'2011-01-15',getdate())=1 --日
datediff(week,'2011-01-15',getdate())=1 --周
datediff(month,'2011-01-15',getdate())=1 --月
如过有符合条件的就提醒,然后把标志重置一下,比如1代表已经日提醒过,2代表日周都提醒过,3代表全提醒过,如果用户未反馈就依然把标志设为0,下次扫描时接着提醒
指定一个起始日,计算到该日的天数,/7 得到经过的周数。然後按这个周数分组。