Get next date based on the day number - mysql
我是 mysql 新手,我想写一个查询,我在其中传递日期编号,它给我下一个日期在即将到来的/当前周。
示例:
如果今天是星期一(2018 年 1 月 1 日)并且我通过了 5,那么我想要星期五(2018 年 1 月 5 日)。
如果今天是星期五(2018 年 1 月 5 日)并且我通过了 1,那么我想要星期一(2018 年 1 月 8 日)。
我已经编写了一个基本查询,但我无法使其通用。
查询:
- 你能准确地说出你的问题吗?号码是星期几?
-
是的,它将是一周中的一天。 1到7之间。
-
如果今天是一周的第二天,我通过了第二天,你想要今天还是下周的第二天?
-
我假设您的情况下一周的第一天是星期一,而不是星期日。
-
@MadhurBhaiya 是的,星期一。
-
@DanielBlais 我想要下个工作日。
-
这是你想要的吗? select date_add(now(), interval 7 - dayofweek(now()) + @day_num day);
-
select date_add(now(), interval 7 - dayofweek(now()) + 5 day); 这给了我 2018-11-15 13:00:37 而不是 2018-11-08 13:00:37。
-
@Rohit 如果您只想将其用于显示目的,那么您可以查看 PHP/Laravel 中的 Carbon 库。在 MySQL 中完成它需要大量带有条件表达式的代码
-
不,它不仅仅是为了展示。我将用于计算下一个交货日期。我只用 SQL 中的一行就可以做到这一点,但在 mysql 中我不知道我应该如何编写它。 SQL 查询 - select DATEADD(DAY, (DATEDIFF(DAY, @day_id - 1, GETDATE()) / 7) * 7 + 7, @day_id - 1)
-
检查:stackoverflow.com/a/52780138/2469308 这可能会给你一些提示
-
如果假设今天是星期一(2018 年 1 月 1 日),您输入 1,会发生什么情况。这将只给出当前日期,还是下周一(2018 年 1 月 8 日)?
-
@MadhurBhaiya 下周一(8 号)
-
select date_add(now(), interval CASE WHEN dayofweek(now()) < 5 THEN 7 - 5 + 1 ELSE 7 - dayofweek(now()) + 5 END day);
-
@Rohit您可以检查发布的答案是否有效。让我知道这些问题。它可以进一步优化,一旦你确认它正在工作,我会添加解释。如果遗漏了一些边缘情况,也请告诉我。
试试(可以进一步优化,但先看看能不能用):
- 谢谢。它似乎正在工作。仅当日除外,例如对于 2,它返回的是今天的日期而不是下一个日期。
-
@Rohit 所以你输入 2 作为 day_num ?
-
是的。 set @day_num = 2; SELECT CASE WHEN WEEKDAY(CURDATE()) + 1 >= @day_num THEN (CURDATE() + INTERVAL (6 - WEEKDAY(CURDATE())) DAY) + INTERVAL @day_num DAY ELSE (CURDATE() + INTERVAL (0 - WEEKDAY(CURDATE())) DAY) + INTERVAL (@day_num-1) DAY END AS next_date;
-
@Rohit 我在我的系统上运行了上述查询。我得到 2018-11-13。查询是绝对正确的。请仔细检查。谢谢。
-
当天的问题是由于服务器的日期时间。我今天早上想通了。谢谢你的帮助。干杯!