关于根据天数获取下一个日期:根据天数获取下一个日期 – mysql | 珊瑚贝

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
    select date_add(now(), interval dayofweek(now()) + (6 @day_num)  day);
    • 你能准确地说出你的问题吗?号码是星期几?
    • 是的,它将是一周中的一天。 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您可以检查发布的答案是否有效。让我知道这些问题。它可以进一步优化,一旦你确认它正在工作,我会添加解释。如果遗漏了一些边缘情况,也请告诉我。


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

    1
    2
    3
    4
    5
    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_num1) 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。查询是绝对正确的。请仔细检查。谢谢。
    • 当天的问题是由于服务器的日期时间。我今天早上想通了。谢谢你的帮助。干杯!


    来源:https://www.codenong.com/53161209/

    微信公众号
    手机浏览(小程序)

    Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

    Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

    Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_9601.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
    0
    分享到:
    没有账号? 忘记密码?