【发布时间】:2012-12-28 08:53:22
【问题描述】:
我被困在一个查询中。需要你的帮助。
我有表 tblEventCalendarEvents
id name start_date end_date rec_type
891 Bob Lehman 2012-05-01 2099-02-01 0_2_1_1
892 Bob Lehman 2012-11-01 2099-02-01 1_4_3_1
893 Bob Lehman 2012-05-03 2099-02-01 0_0_2_2
我想做这样的任务。我想要这样的记录,如果今天是 between startdate and enddate 也基于记录类型。
在 RecType Filed 中存储的值类似于 0_2_1_1 表示此事件每隔一个月、第一周和第三天重复一次。
因此,如果事件开始于 2012 年 5 月 1 日意味着 2012 年 5 月 1 日,那么现在该事件在满足重复条件的日期重复,那么它将每两个月重复一次,所以下个月是 7 月、第 1 周和第 3 周天意味着下一个重复日期是 2012-07-03 2012 年 7 月 3 日。
所以它会重复
2012/07/01
2012/09/02
2012/11/04
2013/01/06
【问题讨论】:
-
无论您使用哪种 DBMS,这都将是非常复杂的。可以办到;这样做不会很有趣。简单地解析符号
month_n_w_d_#no很麻烦。尚不清楚year_n_x_y_#no版本中这些字段的含义(每个第 n 年的第 x 个月和该月的第 y 天?)。您的问题可以有用地省略“created_date”和“updated_date”列,因为它们对问题无关紧要,并且会避免水平滚动条(隐藏关键列)。您也可以省略“url”列。 -
@JonathanLeffler 现在在 rec_type 字段中再次检查我的问题,现在数据如 (year_month_week_day) 这意味着数据将以这种方式重复。如果 rec_type 为 0_2_1_1 则输出数据将在每 2 个月、第一周和第一天重复一次
-
对于
0_2_1_1,这意味着每两个月,第一周和第一天,对吗?所以在你的例子中,它应该是2012/07/01,2012/09/01等等? -
@techdo 是的,但在最后一个参数中是指一周中的那一天而不是日期,所以就像如果 1 则为星期日,2 则为星期一......n 以此类推 7意味着星期六....
-
你的问题是“我想要这样的记录,如果今天在 startdate 和 enddate 之间也基于记录类型。”是否意味着如果两个条件都满足,任务必须发生?
标签: sql sql-server sql-server-2008 tsql sql-server-2005