我想要一个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替代品。
谢谢。
答案 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'