如何获得即将到来的周日日期?

问题描述:

我需要得到“即将到来的星期天”的日期如何获得即将到来的周日日期?

我该怎么做?

我见过的DAYOFWEEK功能,但是这不是真的,我什么后(可能是在WHERE子句中有用)

编辑:

我改变的问题从我变回周六到原来星期天,因为我得到了周日的时候有效的答案,它可以帮助一些人在未来

我发现了一些其他日期的问题和答案“周结束”其他地方(包括这里SO)

对我来说,最有用的解决方案是找到的答案here

+2

向我们展示您的代码。 – Adam

+1

只是迂腐,但周日是一周的第一天,而不是最后一天。 – beercodebeer

+0

@beercodebeer将星期一作为MySQL的明确支持的一周的最后一天:请参阅WEEK函数的'mode'参数:http://dev.mysql.com/doc/refman/5.1/en/date-and -time-functions.html#function_week –

UPDATE

更好地利用curdate()代替now(),所以可以省略通过date()最终转化到DATE类型。

SELECT curdate() + INTERVAL 6 - weekday(curdate()) DAY; 

下周日或

SET @date = '2014-03-05'; 

SELECT @date + INTERVAL 6 - weekday(@date) DAY; 

用于可变日期。


原来的答案

只需使用该语句将在下周日:

SELECT date(now() + INTERVAL 6 - weekday(now()) DAY); 

输出

+-----------------------------------------------+ 
| date(now() + INTERVAL 6 - weekday(now()) DAY) | 
+-----------------------------------------------+ 
| 2014-04-13         | 
+-----------------------------------------------+ 

Expla国家:

weekday(now())返回当前工作日(从星期一开始为0,星期日为6)。因此,从6日减去当前工作日,并将余下的日期截至下一个周日。然后将它们添加到当前日期并获取下一个星期日的日期。

或者,如果你想保持它灵活地与任何日期的工作:

SET @date = '2014-03-05'; 

SELECT date(@date + INTERVAL 6 - weekday(@date) DAY); 

输出

+-----------------------------------------------+ 
| date(@date + INTERVAL 6 - weekday(@date) DAY) | 
+-----------------------------------------------+ 
| 2014-03-09         | 
+-----------------------------------------------+ 
+0

嗨,谢谢。你能解释一下这里发生了什么吗? – Drewdavid

+0

@Drewdavid weekday(now())返回当前的工作日(星期一从0开始)。 6日是星期日。所以,我做了6 - 4日,直到下个星期天。 – citizen404

+1

是的,我认为我通过分解它并在较小的部分运行查询来查看输出是什么。感谢这正是我想要做的(不知道星期几功能):) – Drewdavid

Date()+8-WeekDay(Date()) 

,并尝试该

=IIf(Weekday(Now())=1,DateAdd("d",7,Now()), 
IIf(Weekday(Now())=2,DateAdd("d",6,Now()), 
IIf(Weekday(Now())=3,DateAdd("d",5,Now()), 
IIf(Weekday(Now())=4,DateAdd("d",4,Now()), 
IIf(Weekday(Now())=5,DateAdd("d",3,Now()), 
IIf(Weekday(Now())=6,DateAdd("d",2,Now()), 
IIf(Weekday(Now())=6,DateAdd("d",1,Now())))))))) 
+0

嗨,你的第一行是生产语法错误 – Drewdavid

+0

这看起来不像有效的MySQL SQL语法。你能解释它在MySQL中的工作原理吗?谢谢。 –

WEEK功能可与STR_TO_DATE配对一个不错的一行:

SELECT STR_TO_DATE(CONCAT(YEAR(NOW()),WEEK(NOW(),1), ' Sunday'), '%X%V %W') as `this Sunday`; 
+-------------+ 
| this Sunday | 
+-------------+ 
| 2014-04-13 | 
+-------------+; 

如果您按照文档链接进行操作,则总体战略大多是从STR_TO_DATE关于年/周转换的注释中收集的。然后,WEEK的模式参数被用来将星期日作为最后一天,而不是一周中的第一天。从本质上讲,我们构建这样的字符串:

'201415 Sunday' 

,这是“2014年,第15周的星期天”被解释为。

为了以防万一,我在年边界测试了这个...看起来还好吧!

SELECT STR_TO_DATE(CONCAT(YEAR('2014-12-31'),WEEK('2014-12-31',1), ' Sunday'), '%X%V %W') as `this Sunday`; 
+-------------+ 
| this Sunday | 
+-------------+ 
| 2015-01-04 | 
+-------------+