使用mysql存储过程查找下一个某个工作日

时间:2014-04-07 09:36:57

标签: mysql sql date stored-procedures

在我的数据库中我有一个列4个案例:

  • 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(),INTERVAL x DAY),(我想......)但我无法弄明白!有什么建议吗?

2 个答案:

答案 0 :(得分:1)

使用DAYOFWEEK(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

答案 1 :(得分: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