我的数据库中有一个名为Tasks
. 该表中的每条记录都有 2 个字段:StartDate
,EndDate
我需要创建递归存储过程,它将在这些日期的中间发送邮件。
例如:
开始是2013-10-22 12:00:00:000
结束是2013-10-24 12:00:00:000
我可以:
SELECT DATEADD(ms,
DATEDIFF(ms,'2013-10-22 12:00:00:000', '2013-10-24 12:00:00:000')/2,
'2013-10-22 12:00:00:000')
然后检查现在是否大于那个日期,如果是,那么我可以发送邮件。
但我需要递归地这样做:第一个主必须在中间发送,第二个在 1/4 中,第三个在 1/8 等,最后在剩下 2 小时时发送。
我的第一个想法是在我的表中添加列并在其中存储最后一个主要的日期,但我想避免修改表。
我认为递归选择会更好,但欢迎任何关于如何解决的想法:)
编辑:我的示例小提琴:http ://sqlfiddle.com/#!3/25d0d/1
我的例子:
任务开始于 2013-10-22 8:00,结束于 2013-10-22 21:00
程序从 2013 年 10 月 22 日 10:00 开始,
第一条记录的发送时间是 14:30,所以没有什么要发送的
程序从 2013 年 10 月 22 日 12:00 开始,
第一条记录的发送时间是 14:30,所以什么都没有发送
程序从 2013 年 10 月 22 日 14:00 开始,
第一条记录的发送时间是 14:30,所以什么都没有发送
程序从 2013 年 10 月 22 日 16:00 开始,
第一条记录的发送时间为 14:30,因此发送有关该任务的邮件
下一条消息应该在 17:45 左右发送
程序从 2013 年 10 月 22 日 18:00 开始,
第一条记录的发送时间为 17:45,因此发送有关该任务的邮件
下一条消息应该在 19:22 左右发送
程序从 2013 年 10 月 22 日 20:00 开始,
第一条记录的发送时间是 19:22,所以应该发送邮件,
但是因为从 19:22 到 21:00 少于 2 小时,所以不需要邮件