如何获得即将到来的周日日期?
我需要得到“即将到来的星期天”的日期如何获得即将到来的周日日期?
我该怎么做?
我见过的DAYOFWEEK
功能,但是这不是真的,我什么后(可能是在WHERE子句中有用)
编辑:
我改变的问题从我变回周六到原来星期天,因为我得到了周日的时候有效的答案,它可以帮助一些人在未来
我发现了一些其他日期的问题和答案“周结束”其他地方(包括这里SO)
对我来说,最有用的解决方案是找到的答案here。
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 |
+-----------------------------------------------+
嗨,谢谢。你能解释一下这里发生了什么吗? – Drewdavid
@Drewdavid weekday(now())返回当前的工作日(星期一从0开始)。 6日是星期日。所以,我做了6 - 4日,直到下个星期天。 – citizen404
是的,我认为我通过分解它并在较小的部分运行查询来查看输出是什么。感谢这正是我想要做的(不知道星期几功能):) – 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()))))))))
嗨,你的第一行是生产语法错误 – Drewdavid
这看起来不像有效的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 |
+-------------+
向我们展示您的代码。 – Adam
只是迂腐,但周日是一周的第一天,而不是最后一天。 – beercodebeer
@beercodebeer将星期一作为MySQL的明确支持的一周的最后一天:请参阅WEEK函数的'mode'参数:http://dev.mysql.com/doc/refman/5.1/en/date-and -time-functions.html#function_week –