2016-09-29 99 views
-3

我们MySQL表是这样的:匹配日期算法MYSQL

ON_FRIDAY bit(1)    //occurs on friday 1/0 
ON_MONDAY bit(1) 
ON_SATURDAY bit(1) 
ON_SUNDAY bit(1) 
ON_THURSDAY bit(1) 
ON_TUESDAY bit(1) 
ON_WEDNESDAY bit(1) 
REPETITION_STARTS_FROM date //valid from 
WEEKLY_REPETITION int(11)  //1-4 1=every week 2=every second week 3=every third week 4=once a month 

,并有创建日期,如“2016年9月29日” 这会发生的每一个相同的日期作为记录匹配匹配查询在表中定义

实施例:

ON_FRIDAY 1 
ON_MONDAY 0 
ON_SATURDAY 0 
ON_SUNDAY 0 
ON_THURSDAY 0 
ON_TUESDAY 0 
ON_WEDNESDAY 1 
REPETITION_STARTS_FROM '2016-08-23' 
WEEKLY_REPETITION 3  //every third week 

匹配天的本实施例中(返回true): 24.8。 26.8。 14.9。 16.9。 5.10。 7.10。 等

任何想法如何解决这个问题? 我不是在寻找确切的SQL查询,但想法如何解决它。

+1

你尝试了什么?你不能指望我们为你工作:) –

+0

请看看[how-to-ask](http://stackoverflow.com/help/how-to-ask) – swe

回答

1

我已经想通了。

起初我因为一些日期是这样计算周数:

cast((datediff(date_sub(repetition_starts_from, interval (dayofweek(repetition_starts_from) - 2) day), '2014-01-01')/7) as unsigned) as weeks 

cast((datediff(date_sub(SEARCHED_DATE, interval (dayofweek(SEARCHED_DATE) - 2) day), '2014-01-01')/7) as unsigned) as weeks 

然后我计算模量这两个值是这样的:

weeks % weekly_repetition 

如果模量上是相同的日期,那么我知道我是在两个日期可以匹配的星期内,最后一件事是在周中的所有日子中找出这样的星期几是否匹配:

case when dayofweek(SEARCHED_DATE) = 1 and on_monday = 1 then 1 else 0 end 

如果有人有更优雅的方法做我的客人。