如何从星期几和星期几获得前一年

时间:2020-09-14 06:55:33

标签: mysql sql

我在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无法执行。

3 个答案:

答案 0 :(得分:3)

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

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周内运行此查询,则不会得到有效的结果。

答案 1 :(得分:0)

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; 

答案 2 :(得分:0)

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

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