2010-09-10 5 views
2

Est-il possible de définir mySQL pour avoir un samedi comme début de la semaine?Est-il possible de définir mySQL pour avoir un samedi comme début de la semaine?

Je suis en train d'exécuter une requête comme:

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

Mais la semaine commence un samedi, et non dimanche ou lundi. (Il s'agit d'une semaine de paye, pas d'une semaine normale) Il semble que les modes de la semaine ne proposent que le dimanche ou le lundi comme date de départ. J'ai lu que le paramètre default_week_format peut aider, mais je ne pense pas que cela fonctionnera pour moi, car c'est uniquement pour des rapports spécifiques, pas pour l'ensemble du système.

Est-ce que j'ai d'autres options?

Répondre

1

cribbed des commentaires du lien dans la réponse de Tomasz:

Problème: Pour début et fin de la semaine date avec le début de la semaine jour de l'utilisateur et la date spécifiée par l'utilisateur pour où la semaine se trouve.

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 
+0

Ce n'était pas ce que j'espérais mais ça m'a permis d'aller dans la bonne direction ... Merci – Jason

1

Je propose une autre décision qui vous permettra de manipuler et de personnaliser des calendriers entre les fuseaux horaires et le groupe le plus important par semaines qui sont définies dans des fuseaux horaires différents

donc, supposons que votre mySQL est en cours d'exécution sur le serveur configuré UTC et vous voulez avoir un calendrier personnalisé qui est de 7 heures à l'avance et par conséquent vos semaines devraient commencer le samedi 7 heures

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); 

maintenant un CarteSi populaire une jointure qui devrait remplir votre table:

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; 

Lets mise à jour les heures:

update db_wh_repo.wh_blur_calendar set date = date_add(date, interval 7 hour); 

et enfin organiser votre semaine de calendrier d'une manière personnalisée

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)); 

Croyez-moi, je passe quelques heures à venir avec cette décision, mais il vous donne tellement de liberté au cas où vous souhaitez regrouper vos résultats en fonction d'un fuseau horaire personnalisé et les définitions de la semaine.

Questions connexes