2017-03-08 65 views
1

我想用select语句获取两个日期之间的星期一,但我只在sql server中搜索过。在两个日期之间得到星期一mysql

我已经试过这一点,但它doesn't工作:

SELECT DATE_ADD('2017-01-01', INTERVAL ROW DAY) AS Date 
FROM (
      SELECT @row := @row + 1 AS row 
      FROM (
         SELECT 0 UNION ALL 
         SELECT 1 UNION ALL 
         SELECT 3 UNION ALL 
         SELECT 4 UNION ALL 
         SELECT 5 UNION ALL 
         SELECT 6 
      ) t1, 
      (
       SELECT 0 UNION ALL 
       SELECT 1 UNION ALL 
       SELECT 3 UNION ALL 
       SELECT 4 UNION ALL 
       SELECT 5 UNION ALL 
       SELECT 6 
      ) t2, 
      (
       SELECT @row:=-1 
      ) t3 LIMIT 31 
     ) b 
WHERE DATE_ADD('2017-01-01', INTERVAL ROW DAY) BETWEEN '2017-01-01' AND '2017-12-31' 
AND DAYOFWEEK(DATE_ADD('2017-01-01', INTERVAL ROW DAY)) = 2 

此查询仅给了我Monday's日期为一个月。

我希望你能帮助我

问候!

回答

2

如果你真的只想解决这个SQL,你必须深入研究一下并产生一个连续的日子,这是迄今为止解决这个问题最困难的一项任务。除此之外,正如您已经猜到的那样,您可以使用DAYOFWEEKWEEKDAY来获得您想要的日子。

SELECT * 
    FROM (
     SELECT DATE_ADD('2013-01-01', 
      INTERVAL n4.num*1000+n3.num*100+n2.num*10+n1.num DAY) AS DATE 
      FROM (
       SELECT 0 AS num 
       UNION ALL SELECT 1 
       UNION ALL SELECT 2 
       UNION ALL SELECT 3 
       UNION ALL SELECT 4 
       UNION ALL SELECT 5 
       UNION ALL SELECT 6 
       UNION ALL SELECT 7 
       UNION ALL SELECT 8 
       UNION ALL SELECT 9 
     ) AS n1, 
     (
       SELECT 0 AS num 
       UNION ALL SELECT 1 
       UNION ALL SELECT 2 
       UNION ALL SELECT 3 
       UNION ALL SELECT 4 
       UNION ALL SELECT 5 
       UNION ALL SELECT 6 
       UNION ALL SELECT 7 
       UNION ALL SELECT 8 
       UNION ALL SELECT 9 
     ) AS n2, 
     (
       SELECT 0 AS num 
       UNION ALL SELECT 1 
       UNION ALL SELECT 2 
       UNION ALL SELECT 3 
       UNION ALL SELECT 4 
       UNION ALL SELECT 5 
       UNION ALL SELECT 6 
       UNION ALL SELECT 7 
       UNION ALL SELECT 8 
       UNION ALL SELECT 9 
     ) AS n3, 
     (
       SELECT 0 AS num 
       UNION ALL SELECT 1 
       UNION ALL SELECT 2 
       UNION ALL SELECT 3 
       UNION ALL SELECT 4 
       UNION ALL SELECT 5 
       UNION ALL SELECT 6 
       UNION ALL SELECT 7 
       UNION ALL SELECT 8 
       UNION ALL SELECT 9 
     ) AS n4 
    ) AS a 
WHERE DATE >= '2017-01-01' AND DATE < NOW() 
    AND WEEKDAY(DATE) = 0 
ORDER BY DATE 

其他一些关系型数据库管理系统具有内建功能。

如果您有一个日历表,其中所有日期已经存在,那么会更容易。

+0

感谢您的回答,它的工作原理! –

相关问题