2014-04-07 35 views
0

在我的数据库我有一个第4列的情况:查找下一个一定工作日与MySQL存储过程

  • 1:星期二
  • 2:星期三
  • 3:星期四
  • 4:星期五

即时尝试使存储过程,基于当前日期查找下一个工作日。
例如,如果它的星期三xx.xx.xxxx和情况1,下一个星期二将是即将到来的星期的yy.yy.yyyy。 这里是硬抓:)如果想要的工作日是第二天,它应该选择下周的日期。

是我到目前为止有:

BEGIN 
SELECT 
    CASE case_number 
    WHEN 1 THEN '' 
    WHEN 2 THEN '' 
    WHEN 3 THEN '' 
    WHEN 4 THEN '' 
    ELSE 'unknown' 
    END 
FROM customer 
WHERE customer_id = customerId; 
END 

进出口寻找课程之间'的代码:)我知道我需要DATE_ADD(CURDATE(),间隔X DAY),(我想打..)但我不知道!任何建议?

回答

1

使用DAYOFWEEK(now()) 事实上,你在案例中只能使用CASE。

取决于周数增加全天的天适量NOW()

SELECT 
    CASE case_number 
    WHEN 1 THEN CASE DAYOFWEEK(now()) 
       WHEN 0 THEN DATE_ADD(CURDATE(), INTERVAL x DAY) 
       WHEN 1 THEN DATE_ADD(CURDATE(), INTERVAL x DAY) 
       WHEN 2 THEN DATE_ADD(CURDATE(), INTERVAL x DAY) 
    ..... 
       END 
    WHEN 2 THEN '' 
    WHEN 3 THEN '' 
    WHEN 4 THEN '' 
    ELSE 'unknown' 
    END 
FROM customer 
+0

感谢输入,但我不理解的第二种情况。您可以找到当前的星期几以及什么时候int参数? –

+0

当天的号码DAYOFWEEK *返回日期的工作日索引(1 =星期日,2 =星期一,...,7 =星期六)* – StanislavL

+0

啊我看到了,生病了试试,谢谢 –

0

希望下面的查询工作,你可以修改WHERE条件,包括其他的日子,以及

例:CASE_NUMBER> = 0 AND CASE_NUMBER < 7(0 - 星期一.... 6 - 星期日)

SELECT 
    CASE WHEN WEEKDAY(CURDATE()) <= case_number THEN 
       DATE_ADD(CURDATE(), INTERVAL (7 + (case_number - WEEKDAY(CURDATE()))) DAY) 
     ELSE 
       DATE_ADD(CURDATE(), INTERVAL (7 - (WEEKDAY(CURDATE()) - case_number)) DAY) 
    END 
FROM customer WHERE case_number>= 1 AND case_number <= 4