【问题标题】:Get next date based on the day number - mysql根据天数获取下一个日期 - mysql
【发布时间】:2018-11-06 04:45:25
【问题描述】:

我是 mysql 的新手,我想写一个查询,我在其中传递日期编号,它给了我下一个日期在即将到来的/当前星期。

例子:

  1. 如果今天是星期一(2018 年 1 月 1 日)并且我输入了 5,那么我想要星期五(2018 年 1 月 5 日)。
  2. 如果今天是星期五(2018 年 1 月 5 日)并且我输入 1,那么我想要星期一(2018 年 1 月 8 日)。

我已经编写了一个基本查询,但我无法使其通用。

查询:

select date_add(now(), interval dayofweek(now()) + (6 - @day_num)  day);

【问题讨论】:

  • 你能准确地说出你的问题吗?数字是星期几?
  • 是的,它将是一周中的某一天。 1 到 7 之间。
  • 如果今天是一周的第二天,我过了第二天,你想要今天还是下周的第二天?
  • 我假设您的情况下一周的第一天是星期一,而不是星期日。
  • @MadhurBhaiya 是的,今天是星期一。

标签: mysql


【解决方案1】:

试试(可以进一步优化,但先看看能不能用):

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;

【讨论】:

  • 谢谢。它似乎正在工作。仅当日除外,例如对于 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。查询是绝对正确的。请仔细检查。谢谢。
  • 当天问题是由于服务器的日期时间。我今天早上想通了。谢谢你的帮助。干杯!
猜你喜欢
  • 1970-01-01
  • 2012-12-11
  • 1970-01-01
  • 2014-05-04
  • 2021-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多