上周五怎么过?
我已经尝试了以下代码,但它不向前也不向后。
SELECT DATE_FORMAT(LAST_DAY(NOW()) - ((7 + WEEKDAY(LAST_DAY(NOW())) - 4) % 7), '%Y-%m-%d') last_friday;
我需要的结果应该是:2013-05-24 而不是 2013-05-31。
请更改我的编码。
上周五怎么过?
我已经尝试了以下代码,但它不向前也不向后。
SELECT DATE_FORMAT(LAST_DAY(NOW()) - ((7 + WEEKDAY(LAST_DAY(NOW())) - 4) % 7), '%Y-%m-%d') last_friday;
我需要的结果应该是:2013-05-24 而不是 2013-05-31。
请更改我的编码。
亲,试试这个:
SELECT DATE_FORMAT(DATE_SUB(NOW(), INTERVAL ((7 + WEEKDAY(DATE_SUB(NOW(), INTERVAL 1 WEEK)) - 4) % 7) DAY), '%Y-%m-%d');
在 MySQL 中,该WEEKDAY
函数返回一个从 0 到 6 的整数:星期一为 0,星期二为 1,等等。如果将该值作为天数并从当前日期中减去它,即如下所示:
NOW() - INTERVAL WEEKDAY(NOW()) DAY
您将始终获得当前 [ISO] 周的星期一。
知道这一点,您只需再减去 3 天即可获得上周的星期五。所以,最终的表达式是这样的:
NOW() - INTERVAL WEEKDAY(NOW()) + 3 DAY
你也可以看看这个 SQL Fiddle 演示。
尝试这个
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);
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;
尝试这个
SELECT DATE_FORMAT(LAST_DAY(NOW()) - ((7 + WEEKDAY(LAST_DAY(NOW())) - 4) % 14), '%Y-%m-%d') last_friday;