我正在努力寻找如何将特定时间戳上的发票设置为未来两周的特定时间戳。这是一个示例数据,说明我希望每个交易在周五的2周内付款。我有一些发票需要在周四设置。我该如何计算本周提出的每张发票的时间戳,以便在周五的2周设定日期?还是星期四?
我尝试过将2月份的星期日定为星期五,但出错了,因为它是在星期日而不是星期五开始的一周
DATE_ADD(timestamp, INTERVAL (25 - WEEKDAY(timestamp)) DAY) AS pd
Timestamp Due date
2015-01-01 2015-01-22
2015-01-02 2015-01-22
2015-01-03 2015-01-22
2015-01-04 2015-01-22
2015-01-05 2015-01-22
2015-01-06 2015-01-22
2015-01-07 2015-01-22
2015-01-08 2015-01-29
2015-01-09 2015-01-29
2015-01-10 2015-01-29
2015-01-11 2015-01-29
2015-01-12 2015-01-29
2015-01-13 2015-01-29
2015-01-14 2015-01-29
答案 0 :(得分:0)
使用
DATE_ADD(DATE_ADD( <<your_date_here>> , INTERVAL 2 WEEK),INTERVAL (6-DAYOFWEEK(<<your_date_here>>)) DAY)
应该做的伎俩(如果你想要的是your_date + 2周和下周五)。
如果您想要的是将来的2个星期五,它应该是:
DATE_ADD(DATE_ADD( <<your_date_here>>,INTERVAL (6-DAYOFWEEK(<<your_date_here>>)) DAY) , INTERVAL 2 WEEK)
这对你有用吗?
稍后编辑:
SELECT DATE_ADD( DATE_ADD( '<<your date here>>', INTERVAL IF(DAYOFWEEK('<<your date here>>') > 5 ,16 , 14) DAY ), INTERVAL 6 - DAYOFWEEK( DATE_ADD( '<<your date here>>', INTERVAL IF(DAYOFWEEK('<<your date here>>')>5,16,14) DAY )) DAY );
我解释:
DATE_ADD(&#39;&lt;&lt;你的日期在这里&gt;&gt;&#39;,INTERVAL IF(DAYOFWEEK(&#39;&lt;&lt;你的日期在这里&gt;&gt;&#39;)&gt; 5,16 ,14)
如果星期几是星期日到星期四,则添加14天;如果是星期五或星期六,则添加16天(为了强制它进入下周)。
现在,再次添加到达星期五所需的天数。
原始问题中的示例是错误的: 2015年1月1日是星期四,所以你加上14天(2015年1月15日)+ 1,所以你到了星期五(2015年1月16日)。 2015年1月2日是星期五,但根据您的意愿,您认为星期五是工作周的开始,所以您要寻找未来的第3个星期五(2015年1月23日)。 2015年1月3日 - &gt; 2015年1月23日 2015年1月4日 - &gt; 2015年1月23日 。 。 。 2015年1月8日 - &gt; 2015年1月23日
2015年1月9日 - &gt; 2015年1月30日 2015年1月10日 - &gt; 2015年1月30日 ... 等等。