如何在MYSQL上周五上周五

时间:2013-05-27 07:54:51

标签: mysql

如何在上周五上周五?

我在下面尝试了代码,但它没有前进而不是后退。

SELECT DATE_FORMAT(LAST_DAY(NOW()) - ((7 + WEEKDAY(LAST_DAY(NOW())) - 4) % 7), '%Y-%m-%d') last_friday;

我需要的结果应该是:2013-05-24而不是2013-05-31。

请改变我的编码。

5 个答案:

答案 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;
  • '凯尔'今天仍然在今天是星期五(你可能想要那个。)
  • 'Andriy M'和'dArc'周六和周日回到2周五(如果你不想在上周五看到这个周末已经过去了,这很好。)'dArc'给出了上周五的使用原始帖子使用的'last_day'的月份,所以这可能是最初的问题。
  • 'dquinonez'在星期六,星期日和星期一为我工作 - 如果我知道我将在那些日子运行查询,那就很好。在填写其他日子时,他的方法也是最具可读性的 - 并且对于特殊情况最容易修改。