【问题标题】:How to get previous year from day of week and week如何从一周中的某一天和一周中获取上一年
【发布时间】:2020-09-14 15:43:17
【问题描述】:

我有函数从mysql中的当天获取星期几和星期几 它看起来像。

select 
   DATE_FORMAT(now(), '%U') as w,
   DATE_FORMAT(now(), '%w') as day_of_w;

它返回 w 是 37,day_of_week 是 1。如何得到正确的值 w 是 37,day_of_week 是前一年的 1。

我用

select 
   DATE_FORMAT(now() interval 1 year, '%U') as w,
   DATE_FORMAT(now() interval 1 year, '%w') as day_of_w; 

但是 SQL 无法执行。

【问题讨论】:

  • 你的 MySQL 版本是多少?我认为您需要一个日历表。
  • mysql 版本为 5.7。我在间隔之前错过了 +
  • "+ interval" 提前给你日期.. 如果你想要上一年,你需要使用 "- interval" .. 但是使用 "now() - interval 1 year" 只会让你与今天相同的日期只是不同的年份。不确定您是否会获得第 37 周和第 1 周的日期。这就是为什么我建议您使用日历表 - 或生成日历表。编辑:嗯,我认为 Thorsten 的答案就是你想要的。

标签: mysql sql


【解决方案1】:

将字符串转换为日期的函数是STR_TO_DATE。如果您想获取 2019 年第 37 周第 1 天的日期,您可以使用

select str_to_date('37 1 2019', '%U %w %Y')

如果你想要今天的日期为去年的星期和日期:

select str_to_date(concat_ws(' ', date_format(current_date, '%U'),
                                  date_format(current_date, '%w'), 
                                  year(current_date) - 1),
                   '%U %w %Y')

但请注意,有些年份有 53 周,而有些年份则没有。如果您在一年的第 53 周运行此查询,则不会得到有效结果。

【讨论】:

    【解决方案2】:
    select DAYOFWEEK(now()) day_of_week, week(now()) week from dual
    

    您的查询存在语法问题。你忘了 +/- 符号

    select DATE_FORMAT(now() + interval 1 year, '%U') as w
          ,DATE_FORMAT(now() + interval 1 year, '%w') as day_of_w; 
    

    【讨论】:

    • select DATE_FORMAT(now() + interval 1 year, '%U') as w ,DATE_FORMAT(now() + interval 1 year, '%w') as day_of_w; => 它可以通过 week 和 dayofwek 获得前一年的价值吗?它正确的 sql 吗?为什么当我在当年执行相同的值时
    • 你想做什么? now()给你today now() - interval 1今年给你去年的今天
    • 谢谢你我有解决方案我使用 select str_to_date('37 1 2019', '%U %w %Y')
    【解决方案3】:

    您只需使用MYSQL中的DATE_ADD函数将日期更改为去年。

    select DATE_FORMAT(DATE_ADD(now(), INTERVAL -1 YEAR), '%U') as w
    ,DATE_FORMAT(DATE_ADD(now(), INTERVAL -1 YEAR), '%w') as day_of_w;
    

    结果:

    36  6
    

    当前和去年日期:

    select now() as curr_yr_date, DATE_ADD(now(), INTERVAL -1 YEAR) as last_yr_date;
    

    结果:

    2020-09-14 07:13:24 2019-09-14 07:13:24
    

    【讨论】:

    • 这个结果也适用于闰年:-)
    • 这样做的问题是它给了你上一年相同的日期(例如 2020-09-14 的 2019-09-14),而不是具有相同星期和日期的日期请求(例如 2019 年 9 月 16 日为 2020 年 9 月 14 日,两者都是第 37 周的第 1 天)。
    猜你喜欢
    • 1970-01-01
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 2021-07-21
    相关资源
    最近更新 更多