繁体   English   中英

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

[英]How do I get the first day of the week of a date in mysql?

假设我有 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 

是的,我意识到 origin 拼写错误,但它在我之前就在这里,所以我无法更正它,因为有太多内部应用程序引用它。

所以,我按周分组,但我希望它填充我的图表,所以我不能让几周的所有开始看起来都像不同的日期。 我该如何解决?

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

DATE_ADD(mydate, INTERVAL(1-DAYOFWEEK(mydate)) DAY)

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

DATE_ADD(mydate, INTERVAL(-WEEKDAY(mydate)) DAY);

更多信息

如果您需要处理从星期一开始的几周,您也可以这样做。 首先定义一个自定义的FIRST_DAY_OF_WEEK函数:

DELIMITER ;;
CREATE FUNCTION FIRST_DAY_OF_WEEK(day DATE)
RETURNS DATE DETERMINISTIC
BEGIN
  RETURN SUBDATE(day, WEEKDAY(day));
END;;
DELIMITER ;

然后你可以这样做:

SELECT FIRST_DAY_OF_WEEK('2011-01-03');

供您参考,MySQL 提供了两种不同的函数来检索一周的第一天。 DAYOFWEEK

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

工作日

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

如果一周从星期一开始

  SELECT SUBDATE(mydate, weekday(mydate));

如果一周从星期日开始

  SELECT SUBDATE(mydate, dayofweek(mydate) - 1);

例子:

SELECT SUBDATE('2018-04-11', weekday('2018-04-11'));

2018-04-09

SELECT SUBDATE('2018-04-11', dayofweek('2018-04-11') - 1);

2018-04-08

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

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

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

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
select '2011-01-03' - INTERVAL (WEEKDAY('2011-01-03')+1) DAY; 

返回一周的第一天的日期。 你可以研究一下。

这比编写一个函数来确定一周的第一天要简单得多。

一些变体将如
SELECT DATE_ADD((SELECT CURDATE() - INTERVAL (WEEKDAY(CURDATE())+1)DAY),INTERVAL 7 DAY) (用于查询的结束日期,例如“开始日期”和“结束日期”之间)。
SELECT CURDATE() - INTERVAL (WEEKDAY(CURDATE())+1) DAY (用于查询的开始日期)。

这将返回当前周的所有值。 示例查询如下所示:
SELECT b.foo FROM bar b
WHERE b.datefield BETWEEN
(SELECT CURDATE() - INTERVAL (WEEKDAY(CURDATE())+1) DAY)
AND
(SELECT DATE_ADD((SELECT CURDATE() - INTERVAL (WEEKDAY(CURDATE())+1)DAY),INTERVAL 7 DAY))

这对我有用

只需确保以下查询中的两个日期相同...

SELECT ('2017-10-07' - INTERVAL WEEKDAY('2017-10-07') Day) As `mondaythisweek`

此查询返回: 2017-10-02 这是星期一,

但是如果你的第一天是星期天,那么只需从这个和 wallah 的结果中减去一天!

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

DATE_SUB(mydate, INTERVAL WEEKDAY(mydate) DAY)
  SELECT MIN(DATE*given_date*) FROM *table_name*

这将在任何给定日期的一周开始时返回。

保持良好的工作!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM