是否可以将mySQL设置为一个星期六作为一周的开始?
我正在尝试运行如下查询:
SELECT DISTINCT(week(`date`))
FROM `table`
WHERE `date` BETWEEN '2010-08-14' AND '2010-08-27'
但这一周是从周六开始的,而不是周日或周一。(它针对的是支付期周,而不是常规周)似乎周功能的模式只提供周日或周一作为开始日期。
我读到过设置default_week_format可能会有所帮助,但我认为这对我不起作用,因为这只适用于特定的报告,而不是整个系统。
我还有其他选择吗?
发布于 2010-09-11 02:19:40
抄袭自Tomasz答案中链接的评论:
问题:使用用户指定的周的开始日期和用户指定的日期查找周的开始和结束日期。
date_sub(t.date, interval if(dayofweek(t.date)-$weekStartingDay >= 0, dayofweek(t.date)-$weekStartingDay, dayofweek(t.date)-$weekStartingDay+7) day) week_start
date_sub(t.date, interval if(dayofweek(t.date)-$weekStartingDay >= 0, dayofweek(t.date)-$weekStartingDay, dayofweek(t.date)-$weekStartingDay+7) - 6 day) week_end
发布于 2015-06-24 18:40:23
我将提出另一个决定,允许您在不同时区中定义的时区和最重要的按周分组之间操作和自定义日历
因此,让我们假设您的mySQL运行在协调世界时配置的服务器上,并且您希望有一个提前7小时的自定义日历,因此您的周应该从星期六上午7点开始
CREATE TABLE `wh_blur_calendar` (
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`y` smallint(6) DEFAULT NULL,
`q` tinyint(4) DEFAULT NULL,
`m` tinyint(4) DEFAULT NULL,
`d` tinyint(4) DEFAULT NULL,
`w` tinyint(4) DEFAULT NULL,
PRIMARY KEY (`date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `wh_ints` (
`i` tinyint(4) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into wh_ints values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
现在,一个流行的笛卡尔连接应该填充到您的表中:
INSERT INTO wh_blur_calendar (date)
SELECT DATE('2010-01-01 00:00:00 ') + INTERVAL a.i*10000 + b.i*1000 + c.i*100 + d.i*10 + e.i DAY
FROM wh_ints a JOIN wh_ints b JOIN wh_ints c JOIN wh_ints d JOIN wh_ints e
WHERE (a.i*10000 + b.i*1000 + c.i*100 + d.i*10 + e.i) < 10245
ORDER BY 1;
让我们更新小时数:
update db_wh_repo.wh_blur_calendar set date = date_add(date, interval 7 hour);
最后,以一种自定义的方式安排日历周
UPDATE wh_blur_calendar
SET
y = YEAR(date),
q = quarter(date),
m = MONTH(date),
d = dayofmonth(date),
w = week(date_add((date), interval 1 day));
相信我,我花了几个小时做出这个决定,但如果你想要根据自定义时区和周的定义对结果进行分组,它给了你很大的自由。
发布于 2010-09-11 02:13:18
周一或周日是可能的,AFAIK没有其他选择:
http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html
https://stackoverflow.com/questions/3687119
复制相似问题