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

Requêtes PostgreSQL Discussion :

Filtrer sur une période de l'année?


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre du Club
    Filtrer sur une période de l'année?
    Bonjour,

    J'aimerais mettre en place un filtre qui respecte cette procédure:
    - Si la date de saisie est comprise entre le 1er janvier et le 30 avril, alors il faut que la valeur soit 1,
    - Si la date de saisie est comprise entre le 1er mai et le 31 aout, alors il faut que la valeur soit 2,
    - Si la date de saisie est comprise entre le 1er septembre et le 31 décembre, alors il faut que la valeur soit 3.
    ça fait un bon moment que je cherche comment faire pour que ce ne soit pas dépendant de l'année?! Car dans un champ date, il faut forcément saisir l'année...
    Donc comme est ce que je pourrais faire?

    Merci,A+

  2. #2
    Membre régulier
    Bonjour.

    Voici une idée:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT A.dt
         , EXTRACT(DOY FROM A.dt) AS jyear
         , CASE WHEN EXTRACT(DOY FROM A.dt) <= 121 THEN 1 
                WHEN EXTRACT(DOY FROM A.dt) <= 244 THEN 2 
                ELSE 3 
            END AS j 
    FROM ( SELECT '2020-12-31'::date AS dt ) AS A;


    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
         dt     | jyear | j 
    ------------+-------+---
     2020-12-31 |   366 | 3
    (1 ligne)

  3. #3
    Modérateur

    Ca ne va pas fonctionner à cause des années bissextiles.
    Vu la demande initiale, il suffit de regarder le mois de la date saisie, de le diviser par 4 et de l'arrondir à l'entier supérieur :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    select t.dt
         , ceil(extract(month from t.dt) / 4.0) as num
      from generate_series(date '2020-01-15', date '2020-12-15', interval '1 month') as t (dt);
     
     
    dt          num
    ----------  ---
    2020-01-15    1
    2020-02-15    1
    2020-03-15    1
    2020-04-15    1
    2020-05-15    2
    2020-06-15    2
    2020-07-15    2
    2020-08-15    2
    2020-09-15    3
    2020-10-15    3
    2020-11-15    3
    2020-12-15    3

###raw>template_hook.ano_emploi###