select 用户的mail地址列表
from TB
where startdate <@i and enddate>@i
and datepart(dd,dateadd(dd,-7,enddate))=datepart(dd,@i)
--@i 就是当天做个作业每天检查一下即可。
from TB
where startdate <@i and enddate>@i
and datepart(dd,dateadd(dd,-7,enddate))=datepart(dd,@i)
--@i 就是当天做个作业每天检查一下即可。
解决方案 »
- sql server 2008全文索引没有更新
- 两个表合并汇总的问题
- |zyciis|我要对表进行锁表,又不想在Select中写,我分开来写效果是不是一样,谢谢
- 排序小问题(sql)
- 急:最后进价成本查询问题(100分)
- 我在SQLServer在完成配置发布和分发向导中出未能连接到服务器错误,请高手指点!
- sql server如何远程访问数据库
- 如何取得exec sp_ExecuteSql('select count(*) from ( ' + @str + ' ) T'的值
- 在MSSQL中,Constraint是有什么用的?
- 这个SQL问题怎么解决 一群乱代码
- sql模糊查询问题
- 向存在索引的表插入大数据问题
where BeginDate <= GETDATE()
and EndDate >= GETDATE()
and DATEPART(day,BeginDate)= datepart(day,getdate()) +8
或者这样,建立一个要发送的消息表,里面先把结果存进去,然后通知了,就把记录删除,或者做一个删除表标记:
;with t
as
(
select 1 as numberunion allselect number + 1
from t
where number <100
),tb
as
(
select '2013-11-18' BeginDate,'2014-11-17' EndDate
)select dateadd(day,-8,dateadd(month,number,BeginDate)) as 通知日期
from tb
inner join t
on 1 = 1
where dateadd(day,-8,dateadd(month,number,BeginDate)) <=EndDate
/*
通知日期
2013-12-10 00:00:00.000
2014-01-10 00:00:00.000
2014-02-10 00:00:00.000
2014-03-10 00:00:00.000
2014-04-10 00:00:00.000
2014-05-10 00:00:00.000
2014-06-10 00:00:00.000
2014-07-10 00:00:00.000
2014-08-10 00:00:00.000
2014-09-10 00:00:00.000
2014-10-10 00:00:00.000
2014-11-10 00:00:00.000
*/
或者这样,建立一个要发送的消息表,里面先把结果存进去,然后通知了,就把记录删除,或者做一个删除表标记:
;with t
as
(
select 1 as numberunion allselect number + 1
from t
where number <100
),tb
as
(
select '2013-11-18' BeginDate,'2014-11-17' EndDate
)select dateadd(day,-8,dateadd(month,number,BeginDate)) as 通知日期
from tb
inner join t
on 1 = 1
where dateadd(day,-8,dateadd(month,number,BeginDate)) <=EndDate
/*
通知日期
2013-12-10 00:00:00.000
2014-01-10 00:00:00.000
2014-02-10 00:00:00.000
2014-03-10 00:00:00.000
2014-04-10 00:00:00.000
2014-05-10 00:00:00.000
2014-06-10 00:00:00.000
2014-07-10 00:00:00.000
2014-08-10 00:00:00.000
2014-09-10 00:00:00.000
2014-10-10 00:00:00.000
2014-11-10 00:00:00.000
*/
一定要建一个表么,建一个字段不行吗?
或者这样,建立一个要发送的消息表,里面先把结果存进去,然后通知了,就把记录删除,或者做一个删除表标记:
;with t
as
(
select 1 as numberunion allselect number + 1
from t
where number <100
),tb
as
(
select '2013-11-18' BeginDate,'2014-11-17' EndDate
)select dateadd(day,-8,dateadd(month,number,BeginDate)) as 通知日期
from tb
inner join t
on 1 = 1
where dateadd(day,-8,dateadd(month,number,BeginDate)) <=EndDate
/*
通知日期
2013-12-10 00:00:00.000
2014-01-10 00:00:00.000
2014-02-10 00:00:00.000
2014-03-10 00:00:00.000
2014-04-10 00:00:00.000
2014-05-10 00:00:00.000
2014-06-10 00:00:00.000
2014-07-10 00:00:00.000
2014-08-10 00:00:00.000
2014-09-10 00:00:00.000
2014-10-10 00:00:00.000
2014-11-10 00:00:00.000
*/
一定要建一个表么,建一个字段不行吗?加个字段好像不行,你想,加一个字段,表示这个月已经发送了,那么这个月就不发送了,但是什么时候再开启这个标志呢?这也是个麻烦的问题
以你那条数据举例
2013-11-18至 2014-11-17
一条这样的数据应该在提醒任务表中对应2013-12-10,2014-01-10,2014-02-10,2014-03-10…… 2014-11-1这样的N条数据,数据中记录对应的业务数据ID,当业务数据的开始截止日期发生变更时同步更新提醒任务表。有了这张表后就很简单了,写个作业或做个小程序,每天查提醒任务表有没有当天的提醒任务,完成提醒后把任务状态置为已完成,或移到提醒历史表中。