我想获得两个日期之间的所有星期日日期并获得两个日期之间的最后一天,我怎么能在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
开始日期和结束日期可能有变化,请告诉我。 谢谢
答案 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?
在这里演示:
答案 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答案 谢谢蒂姆