是否有可能将mySQL设置为星期六作为一周的开始?

时间:2010-09-10 18:08:41

标签: sql mysql

是否可以将mySQL设置为星期六作为一周的开始?

我正在尝试运行类似的查询:

SELECT DISTINCT(week(`date`)) 
  FROM `table` 
 WHERE `date` BETWEEN '2010-08-14' AND '2010-08-27'

但是这周从周六开始,而不是周日或周一。 (这是一周的付费期,而不是常规的一周) 似乎星期功能的模式仅提供星期日或星期一作为开始日期。

我已经读过设置default_week_format可以提供帮助,但我不认为这对我有用,因为这仅适用于特定报告,而不是整个系统。

我还有其他选择吗?

3 个答案:

答案 0 :(得分:1)

来自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

答案 1 :(得分:1)

我将提出另一个决定,允许您在时区和最重要的组之间操作和自定义日历,这些日历在不同的时区定义了几周

所以,让我们假设您的mySQL在UTC配置的服务器上运行,并且您想拥有一个提前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));

相信我,我花了几个小时来做​​出这个决定,但是如果你想根据自定义的时区和周定义对结果进行分组,它会给你很大的自由。

答案 2 :(得分:0)

可能有周一或周日,AFAIK没有其他选择:

http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html