2016-09-29 104 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 

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