从一个月的mysql获取两个日期和最后一天之间的星期日

时间:2017-03-30 04:39:00

标签: mysql date

我想获得两个日期之间的所有星期日日期并获得两个日期之间的最后一天,我怎么能在mysql中做到这一点? 示例:

start date | end date
2017-03-01 | 2017-03-31

然后结果是:

2017-03-05
2017-03-12
2017-03-19
2017-03-26
2017-03-31

开始日期和结束日期可能有变化,请告诉我。 谢谢

3 个答案:

答案 0 :(得分:0)

MySQL有一个DAYOFWEEK()函数,对于任何星期日这个日期都会返回1

SELECT date_column
FROM yourTable
WHERE (date_column BETWEEN '2017-03-01' AND '2017-03-31' AND
       DAYOFWEEK(date_column) = 1) OR        -- any Sunday
      date_column = '2017-03-31'             -- or the last date in the range

我假设yourTable已有日期。如果在填充具有一系列日期的表时需要帮助,那么在Stack Overflow,q.v之前就已经很好地解决了这个问题。这里:

How to populate a table with a range of dates?

在这里演示:

Rextester

答案 1 :(得分:0)

由于您现在提到您没有日期表,如果您不想在数据库中添加通用日历表,可以像这样处理它。

declare @startdate datetime 
declare @enddate datetime
DECLARE @startdateLoop datetime

select @startdate = CAST(start as DATE), @enddate = CAST(end_date as DATE) from #t
set @startdateLoop = @startdate
CREATE TABLE #tempCal
  (dates datetime)

  WHILE @startdateLoop != @enddate 
  BEGIN
  INSERT INTO #tempCal
  SELECT @startdateLoop

  SET @startdateLoop = DATEADD(dd, 1, @startdateLoop)
  END

  SELECT * FROM #tempCal
  WHERE dates between @startdate and @enddate and DAYOFWEEK(dates) = 1

如果您愿意,可以将其转换为程序。

如果你有日历表,那仍然会很好;正如蒂姆建议的那样。

答案 2 :(得分:0)

SELECT calender FROM calender WHERE calender.calender >='2017-03-01' AND calender.calender <='2017-03-31'  AND DAYOFWEEK(calender) = 1 OR calender = '2017-03-31' Group By calender

这是@Tim答案 谢谢蒂姆

相关问题