添加date_add但保持在周末

时间:2013-06-18 13:06:47

标签: mysql dateadd

我有一个mysql查询

SELECT CONCAT('document',LEFT(cases.id,26)) AS 'id',
cases.date_modified,
cases.date_modified,
'67421f0a-3f44-1093-1ab6-51750b508349' AS 'assigned_user','1','1','0',
'complete documentation in 4 Days' AS 'name',
'Not Started',
cases.date_modified,
DATE_ADD(cases.date_modified,INTERVAL 4 DAY) AS 'due date','Cases',cases.id,
'P1','Complete Operations Documentation' AS 'description'
FROM cases
    INNER JOIN cases_cstm
ON ( cases.id = cases_cstm.id_c)
WHERE cases.`assigned_user_id` = '67421f0a-3f44-1093-1ab6-51750b508349'
AND cases.`status` = 'Start Administration'
AND `cases_cstm`.`file_location` = 'Operations'
 ORDER BY `date_modified` DESC
LIMIT 1;

但问题出在星期二它会在星期三和周三出现,它会在周日出现 星期四或星期五,人们将有2天的工作时间?

我如何检查周末的假期是否在截止日期增加2天?

问候

2 个答案:

答案 0 :(得分:0)

试试这个表达式:

(case when weekday(cases.date_modified) = 0
      then DATE_ADD(cases.date_modified, INTERVAL 4 DAY)
      else DATE_ADD(cases.date_modified, INTERVAL 6 DAY)
  end) as 'due date'

它仅测试一周中的某一天,然后添加适当的持续时间以通过周末。

答案 1 :(得分:0)

DAYOFWEEK函数将在星期日返回1,星期一返回2,星期二返回3,星期六返回7。你可以在这样的条件下使用它:

DATE_ADD(cases.date_modified,
  CASE DAYOFWEEK(cases.date_modified)
    WHEN 3 THEN INTERVAL 6 DAY
    WHEN 4 THEN INTERVAL 5 DAY
    ELSE INTERVAL 4 DAY
  END AS 'due date'

上面的示例为星期二(下周一)增加了6天,星期三(进入下周一)为5天,其他所有星期均为4天。这与你要求的不同(星期三进入下一个星期二而不是星期一),但这可能更合适。您可以根据需要进行调整。