简体   繁体   English

MySQL在没有计算周末的情况下提前两天

[英]MySQL get 2 days before without calculate weekend

is there any way to calculate 2 days ago in MySQL without counting Saturday and Sunday? 有什么方法可以在MySQL中计算2天前的时间而无需计算周六和周日? My data sample: 我的数据样本:

Wednesday, 20 Sept 2017
Thursday, 21 Sept 2017
Friday, 22 Sept 2017
Saturday, 23 Sept 2017
Sunday, 24 Sept 2017
Monday, 25 Sept 2017
Tuesday, 26 Sept 2017
Wednesday, 27 Sept 2017

When I run query on Friday, 22 Sept 2017 , I will get the first data ( Wednesday, 20 Sept 2017 ) 当我在Friday, 22 Sept 2017运行查询时,我将获得第一个数据( Wednesday, 20 Sept 2017

When I run query on Saturday, 23 Sept 2017 , I will get the second data ( Thursday, 21 Sept 2017 ) 当我在Saturday, 23 Sept 2017运行查询时,我将获得第二个数据( Thursday, 21 Sept 2017

When I run query on Sunday, 24 Sept 2017, I will get the third data ( Friday, 22 Sept 2017 ) 当我在2017年9月24日(星期日)运行查询时,我将获得第三个数据( Friday, 22 Sept 2017

But when I run query on Monday, I won't get any data 但是当我在星期一运行查询时,我不会得到任何数据

And when I run query on Tuesday, I will get the fourth data ( Saturday, 23 Sept 2017 ) 当我在星期二运行查询时,我将获得第四个数据( Saturday, 23 Sept 2017

And when I run query on Wednesday, I will get both of fifth data and sixth data ( Sunday, 24 Sept 2017 && Monday, 25 Sept 2017 ) 当我在星期三运行查询时,我将同时获得第五个数据和第六个数据( Sunday, 24 Sept 2017 && Monday, 25 Sept 2017Sunday, 24 Sept 2017 && Monday, 25 Sept 2017

My query so far: 到目前为止我的查询:

SELECT * FROM oc_order WHERE (status_id = '2' AND date_added LIKE CONCAT(DATE_ADD(DATE(NOW()), INTERVAL -2 DAY),'%')) OR (status_id = '21' AND date_modified LIKE CONCAT(DATE_ADD(DATE(NOW()), INTERVAL -2 DAY),'%'))

It works to count 2 days before, but it still count Saturday and Sunday. 它可以算到2天之前,但仍然算到星期六和星期日。 Basically, I create a query that runs everyday to auto change status a data that have been 2 days with a status. 基本上,我创建一个查询,该查询每天运行一次,以自动更改状态为2天的数据的状态。 For example, in Wednesday, I will change any data in Monday that have status_id 2 (for example). 例如,在星期三,我将更改星期一中具有status_id 2任何数据(例如)。 In the other words, Saturday data will be processed on Tuesday. 换句话说,星期六数据将在星期二处理。 Sunday data will be processed on Wednesday, including Monday data, it will be processed on Wednesday too 周日数据将在周三处理,包括周一数据,也将在周三处理

SELECT * FROM   (SELECT status_id,
    date_added,
    date_modified,
    CASE
      WHEN DAYOFWEEK(now()) = 2
      THEN CONCAT(DATE_ADD(DATE(NOW()), INTERVAL -3 DAY),'%')
      WHEN DAYOFWEEK(now()) = 3
      THEN CONCAT(DATE_ADD(DATE(NOW()), INTERVAL -4 DAY),'%')
      ELSE CONCAT(DATE_ADD(DATE(NOW()), INTERVAL -2 DAY),'%')
    END DAY_OF_WEEK   FROM oc_order   ) WHERE (status_id = '2' AND date_added LIKE DAY_OF_WEEK) OR (status_id = '21' AND date_modified LIKE DAY_OF_WEEK)

Finally what I do is set the cron job between monday to friday, so saturday and sunday will not count. 最后,我要做的工作是在星期一至星期五之间设置cron工作,因此星期六和星期天将不计算在内。 Also, these job is better to do in PHP not in SQL. 同样,这些工作最好在PHP中而不在SQL中完成。 Thanks for any comments and answer 感谢您的任何评论和回答

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM