Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre confirmé
    Existe-il une fonction inverse à Week(date) pour connaître le début et fin d'un n° de semaine ?
    bonjour,

    Existe-il une fonction mysql qui retourne la date début d'une semaine qu'on passerait en numéro ? idem pour la date de fin ?
    par exemple SELECT BEGIN_WEEK (18,5) retournerait 2020-04-27 (parce que semaine 18 commençant un lundi)
    ou encore SELECT END_WEEK (18,5) retourneait 2020-05-03 (parce que la semaine 18 se termine le 3 mars 2020 et commence un lundi)

    Merci de votre astuce si vous la connaissez.

    Bonne journée confinée.

  2. #2
    Rédacteur/Modérateur

    À ma connaissance, ces fonctions n'existent pas, mais il suffit de les créer.

    J'ai vu que tu as choisi le mode 5 pour la numérotation des semaines, càd que la semaine 1 est la première semaine de l'année avec un lundi (pour cette année 2020, c'est donc la semaine du 6 janvier). Si le 1er janvier est un lundi, c'est lui-même le premier lundi de l'année. Si c'est un mardi, le premier lundi sera 6 jours plus tard, si c'est un mercredi, 5 jours plus tard, et ainsi de suite. Avec la fonction WEEKDAY, pour laquelle lundi = 0 et dimanche = 6, on obtient donc ainsi la date du premier lundi : (6 - WEEKDAY(1er janvier)) modulo 7. (Oui, j'avoue, j'ai triché avec Excel pour la trouver )

    Une fois déterminé ce premier lundi de l'année, il suffit d'ajouter 7 * (numéro de semaine - 1) pour trouver le début de la semaine que tu veux :

    Code SQL :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE FUNCTION WEEK_BEGINNING(Y INT, W INT)
    RETURNS DATE
    RETURN MAKEDATE(Y, 1) 
      + INTERVAL MOD(7 - WEEKDAY(MAKEDATE(Y, 1)), 7) DAY 
      + INTERVAL 7 * (W - 1) DAY ;


    La fin de la semaine est évidemment 6 jours plus tard :
    Code SQL :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE FUNCTION WEEK_END(Y INT, W INT)
    RETURNS DATE
    RETURN WEEK_BEGINNING(Y, W) + INTERVAL 6 DAY ;


    Il n'y a plus qu'à tester :
    Code SQL :Sélectionner tout -Visualiser dans une fenêtre à part
    select WEEK_BEGINNING(2020, 18), WEEK_END(2020, 18) ;

    Citation Envoyé par phpMyAdmin
    WEEK_BEGINNING(2020, 18) WEEK_END(2020, 18)
    2020-05-04 2020-05-10
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition