如何在mysql中获取一周中第一天的第一天?

dav*_*nes 20 mysql time select date

假设我有2011-01-03并且我想获得本周的第一周,这是星期日,即2011-01-02,我该怎么做呢?

原因是我有这个查询:

select 
  YEAR(date_entered) as year, 
  date(date_entered) as week,   <-------This is what I want to change to select the first day of the week.
  SUM(1) as total_ncrs, 
  SUM(case when orgin = picked_up_at then 1 else 0 end) as ncrs_caught_at_station 
from sugarcrm2.ncr_ncr 
where 
sugarcrm2.ncr_ncr.date_entered > date('2011-01-01') 
and orgin in( 
'Silkscreen', 
'Brake', 
'Assembly', 
'Welding', 
'Machining', 
'2000W Laser', 
'Paint Booth 1', 
'Paint Prep', 
'Packaging', 
'PEM', 
'Deburr', 
'Laser ', 
'Paint Booth 2', 
'Toolpath' 
) 
and date_entered is not null 
and orgin is not null 
AND(grading = 'Minor' or grading = 'Major') 
 and week(date_entered) > week(current_timestamp) -20 
group by year, week(date_entered) 
order by year   asc, week asc 
Run Code Online (Sandbox Code Playgroud)

是的,我意识到起源拼写错误但它在我之前就已经存在,所以我无法纠正它,因为有太多的内部应用程序引用它.

所以,我在几周内进行分组,但我希望这可以填充我的图表,所以我不能让所有的周开始看起来像不同的日期.我该如何解决?

Гро*_*ный 77

如果周从星期日开始,请执行以下操作:

DATE_ADD(mydate, INTERVAL(1-DAYOFWEEK(mydate)) DAY)
Run Code Online (Sandbox Code Playgroud)

如果周从星期一开始,请执行以下操作:

DATE_ADD(mydate, INTERVAL(-WEEKDAY(mydate)) DAY);
Run Code Online (Sandbox Code Playgroud)

更多信息

  • 不,它没有。我在英国,本周开始于 [星期一](http://www.npl.co.uk/reference/faqs/which-is-the-first-day-of-the-week-and-which -is-week-1-of-the-year-(faq-time)) :) (2认同)
  • 而已.我们正在战斗中. (2认同)

Sté*_*ane 34

如果你需要处理周一开始的周,你也可以这样做.首先定义一个自定义FIRST_DAY_OF_WEEK函数:

DELIMITER ;;
CREATE FUNCTION FIRST_DAY_OF_WEEK(day DATE)
RETURNS DATE DETERMINISTIC
BEGIN
  RETURN SUBDATE(day, WEEKDAY(day));
END;;
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

SELECT FIRST_DAY_OF_WEEK('2011-01-03');
Run Code Online (Sandbox Code Playgroud)

为了您的信息,MySQL提供了两种不同的功能来检索一周的第一天.有DAYOFWEEK:

返回日期的工作日索引(1 =星期日,2 =星期一,...,7 =星期六).这些索引值对应于ODBC标准.

周末:

返回日期的工作日索引(0 =星期一,1 =星期二,... 6 =星期日).


小智 11

如果周从星期一开始

  SELECT SUBDATE(mydate, weekday(mydate));
Run Code Online (Sandbox Code Playgroud)

如果周从星期日开始

  SELECT SUBDATE(mydate, dayofweek(mydate) - 1);
Run Code Online (Sandbox Code Playgroud)

例:

SELECT SUBDATE('2018-04-11', weekday('2018-04-11'));
Run Code Online (Sandbox Code Playgroud)

2018年4月9日

SELECT SUBDATE('2018-04-11', dayofweek('2018-04-11') - 1);
Run Code Online (Sandbox Code Playgroud)

2018年4月8日


Gha*_*iya 10

一周从星期日开始,然后获取一周的第一个日期和一周的最后一个日期

SELECT  
  DATE("2019-03-31" + INTERVAL (1 - DAYOFWEEK("2019-03-31")) DAY) as start_date,  
  DATE("2019-03-31" + INTERVAL (7 - DAYOFWEEK("2019-03-31")) DAY) as end_date
Run Code Online (Sandbox Code Playgroud)

一周从星期一开始,然后获取一周的第一个日期和一周的最后一个日期

SELECT  
  DATE("2019-03-31" + INTERVAL ( - WEEKDAY("2019-03-31")) DAY) as start_date, 
  DATE("2019-03-31" + INTERVAL (6 - WEEKDAY("2019-03-31")) DAY) as end_date
Run Code Online (Sandbox Code Playgroud)


Cem*_*ler 6

选择'2011-01-03' - INTERVAL(WEEKDAY('2011-01-03')+ 1)DAY;

返回一周的第一天的日期.你可以调查一下.