假设我有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
是的,我知道原点拼写错误但是在我之前它就在这里,所以我无法纠正它,因为有太多内部应用引用它。
所以,我按周分组,但是我希望这可以填充我的图表,所以我不能让所有的周开始看起来像不同的日期。我该如何解决这个问题?
答案 0 :(得分:69)
如果周日从周日开始,请执行以下操作:
DATE_ADD(mydate, INTERVAL(1-DAYOFWEEK(mydate)) DAY)
如果一周从周一开始,请执行以下操作:
DATE_ADD(mydate, INTERVAL(-WEEKDAY(mydate)) DAY);
答案 1 :(得分:33)
如果你需要处理周一开始的周,你也可以这样做。首先定义自定义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 =星期日)。
答案 2 :(得分:8)
如果周从星期一开始
SELECT SUBDATE(mydate, weekday(mydate));
如果周从星期日开始
SELECT SUBDATE(mydate, dayofweek(mydate) - 1);
实施例
SELECT SUBDATE('2018-04-11', weekday('2018-04-11'));
2018年4月9日
SELECT SUBDATE('2018-04-11', dayofweek('2018-04-11') - 1);
2018年4月8日
答案 3 :(得分:6)
选择'2011-01-03' - INTERVAL(周末('2011-01-03')+ 1)DAY;
返回一周中第一天的日期。你可以调查一下。
答案 4 :(得分:1)
这比编写一个函数来确定一周的第一天要简单得多。
有些变体如
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))
答案 5 :(得分:1)
一周从星期日开始,然后获取一周的第一个日期和一周的最后一个日期
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
答案 6 :(得分:0)
这是我的作品
请确保以下查询中的两个日期相同......
SELECT ('2017-10-07' - INTERVAL WEEKDAY('2017-10-07') Day) As `mondaythisweek`
此查询返回:2017-10-02这是星期一,
但是,如果你的第一天是星期天,那么只需从这个和wallah的结果中减去一天!
答案 7 :(得分:0)
如果一周从星期一开始,请执行以下操作:
DATE_SUB(mydate, INTERVAL WEEKDAY(mydate) DAY)
答案 8 :(得分:0)
SELECT MIN(DATE*given_date*) FROM *table_name*
这将在任何给定日期的一周开始时返回。
继续努力!