mysql:查找日期为2017年的所有星期五

时间:2018-06-25 03:18:22

标签: mysql sql mysqli

我想要一个MySQL查询,该查询将获取带有日期为2017年的所有星期五。

我知道相同的SQL查询是:

SELECT Fridays = DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), n.num)
FROM (SELECT TOP 366 num = ROW_NUMBER() OVER(ORDER BY a.NAME)-1 FROM dbo.syscolumns a, dbo.syscolumns b) n
WHERE DATENAME(weekday, DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), n.num)) = 'Friday'

我正在寻找相同的MySQL替代品。

谢谢。

3 个答案:

答案 0 :(得分:0)

这是mysql中sql逻辑的精确转换

SELECT DATE_ADD(MAKEDATE(year(now()),1), INTERVAL @num:=@num+1 DAY)
From (select @num:=-1) num
where DAYNAME(DATE_ADD(MAKEDATE(year(now()),1), INTERVAL @num:=@num+1 DAY))="Friday"
limit 365 

答案 1 :(得分:0)

MySQL直到版本8才具有row_number函数。在版本8之前,可以使用变量来模拟row_number。

select s.num , date_add(str_to_date(concat('2016','/','12','/','31'),'%Y/%m/%d'), interval s.num day) dt,
            dayname(date_add(str_to_date(concat('2016','/','12','/','31'),'%Y/%m/%d'), interval s.num day)) dy
from
(
select @num:=@num + 1 num from information_schema.columns,(select @num:=0) n
limit 35
) s
where dayname(date_add(str_to_date(concat('2016','/','12','/','31'),'%Y/%m/%d'), interval s.num day)) = 'Friday';

information_schema.columns与dbo.syscolumns相似。

------+------------+--------+
| num  | dt         | dy     |
+------+------------+--------+
|    6 | 2017-01-06 | Friday |
|   13 | 2017-01-13 | Friday |
|   20 | 2017-01-20 | Friday |
|   27 | 2017-01-27 | Friday |
|   34 | 2017-02-03 | Friday |
+------+------------+--------+
5 rows in set, 2 warnings (0.26 sec)

答案 2 :(得分:0)

SELECT * FROM table WHERE ([date] BETWEEN date_start and date_end) AND 
DAYNAME([date])='Friday'

查询源:Get data for every friday between two dates