如何在上周五上周五?
我在下面尝试了代码,但它没有前进而不是后退。
SELECT DATE_FORMAT(LAST_DAY(NOW()) - ((7 + WEEKDAY(LAST_DAY(NOW())) - 4) % 7), '%Y-%m-%d') last_friday;
我需要的结果应该是:2013-05-24而不是2013-05-31。
请改变我的编码。
答案 0 :(得分:6)
老兄,试试这个:
SELECT DATE_FORMAT(DATE_SUB(NOW(), INTERVAL ((7 + WEEKDAY(DATE_SUB(NOW(), INTERVAL 1 WEEK)) - 4) % 7) DAY), '%Y-%m-%d');
答案 1 :(得分:5)
在MySQL中,WEEKDAY
函数返回一个0到6:0的整数,表示星期一,1表示星期二等。如果你把这个值作为天数并从当前日期减去它,即像这样:
NOW() - INTERVAL WEEKDAY(NOW()) DAY
您将始终获得当前[ISO]周的周一。
知道这一点,你只需要再减去3天才能获得上周的星期五。所以,最后的表达式会是这样的:
NOW() - INTERVAL WEEKDAY(NOW()) + 3 DAY
您也可以查看this SQL Fiddle demo。
答案 2 :(得分:1)
试一下
SELECT date_sub(curdate(), INTERVAL
CASE weekday(curdate()) -- weekday will give you the index of the day ( 0 = Monday, 1 = Tuesday, 2 = Wednesday, ... 6 = Sunday)
WHEN 0 THEN 3 -- If Monday then sub 3 days
WHEN 6 THEN 2 -- If Sunday then sub 2 days
ELSE 1 -- Else sub 1 day
END DAY);
答案 3 :(得分:0)
试试这个
SELECT DATE_FORMAT(LAST_DAY(NOW()) - ((7 + WEEKDAY(LAST_DAY(NOW())) - 4) % 14), '%Y-%m-%d') last_friday;
答案 4 :(得分:0)
select now() - interval (weekday( now())+ 2)% 7+ 1 day 'Previous Friday';
我同样在寻找会计解决方案,我需要一个完整的星期五数据。所以,如果今天是星期五,那么我需要now()- interval 7 day
。但是,我可能会兴奋并希望在星期六运行查询,并期望now()- interval 1 day
。鉴于此,在我的情况下,间隔应始终在1到7之间。我看了之前的所有答案,但对我来说,他们并不能满足我的需求。这是一个图表,显示每个人可能的工作日(0 =星期一)的每个人的“减去间隔”:
+---------+---------+------+----------+------+-----------+
| weekday | mine | KaeL | Andriy M | dArc | dquinonez |
+---------+---------+------+----------+------+-----------+
| 0 | 3 | 3 | 3 | 3 | 3 |
| 1 | 4 | 4 | 4 | 4 | 1 |
| 2 | 5 | 5 | 5 | 5 | 1 |
| 3 | 6 | 6 | 6 | 6 | 1 |
| 4 | 7 | 0 | 7 | 7 | 1 |
| 5 | 1 | 1 | 8 | 8 | 1 |
| 6 | 2 | 2 | 9 | 9 | 2 |
+---------+---------+------+----------+------+-----------+
mysql> select i 'weekday',
(i+ 2)% 7+ 1 'mine',
((7+ i- 4)% 7) 'KaeL',
i+ 3 'Andriy M',
((7+ i- 4)% 14) 'dArc',
case i when 0 then 3 when 6 then 2 else 1 end 'dquinonez'
from (select 0 i union select 1 union select 2 union select 3
union select 4 union select 5 union select 6 ) q;