Question

Je suis en train de construire un tableau de synthèse dans le cadre d'une procédure stockée et j'ai deux colonnes.La première colonne doit montrer le début et la deuxième colonne doit montrer la fin d'une plage de date qui est fonction d'un paramètre d'entrée est un nombre désignant le trimestre.J'ai été en mesure d'extraire les éléments suivants à partir de AskTom mais j'ai quelques questions.

Open C1 FOR
SELECT  ( SELECT TRUNC (SYSDATE, 'Q')-1+1 AS 'StartOf' FROM DUAL ),
SELECT  ( SELECT TRUNC(ADD_MONTHS (SYSDATE, +3), 'Q')-2 AS 'EndOf' FROM DUAL )
FROM DUAL; 

Question 1.Va les Maths ici compte pour LeapYears...Je ne pense pas que ça, mais je ne suis pas sûr de savoir comment gérer cela.

Question 2.Comment puis-je ajouter le paramètre d'entrée, 'inQuarter" comme le trimestre donné?J'ai essayé de mettre en place des sysdate, mais j'ai besoin de le reformater en date, je pense?

Merci d'avance pour toutes les réponses.

Était-ce utile?

La solution

Tom Kyte a Givven vous la réponse: http://AskTom.oracle.com / pls / asktom / f? p= 100: 11: 0 ::::: p11_question_id: 250288900346075009

Open C1 FOR 
select add_months( dt, (inQuarter-1)*3 ),
       last_day(add_months( dt, (inQuarter-1)*3+2 ) )
from (
  select to_date( inYear || '0101', 'yyyymmdd' ) dt
  from dual)

Autres conseils

Vous pouvez convertir une valeur numérique de l'année et numérique trimestre paramètre à une DATE

SELECT add_months( trunc( to_date( to_char( <<numeric year>> ),
                                   'YYYY' ),
                          'YYYY' ),
                   3 * <<numeric quarter>> ) first_of_quarter,
       add_months( trunc( to_date( to_char( <<numeric year>> ),
                                   'YYYY' ),
                          'YYYY' ),
                   4 * <<numeric quarter>> ) - 1 last_of_quarter,
  FROM dual

La composante temporelle de ces deux dates seront minuit le dernier jour du trimestre (c'est à dire24 heures avant le début du trimestre suivant).Vous souhaitez peut-être le dernier du trimestre à 23:59:59 le dernier jour du trimestre, si vous voulez la gamme à être inclusive de toutes les dates possibles au cours du trimestre.

Je suggère:

Open C1 FOR
SELECT TRUNC (d_inQuarter, 'Q') AS "StartOf",
       TRUNC(ADD_MONTHS (d_inQuarter, +3), 'Q') AS "EndOf"
FROM (SELECT add_months(to_date(to_char(i_yr)||'-01-01','YYYY-MM-DD'), (i_q-1)*3)
      AS d_inQuarter FROM DUAL); 

- avec les paramètres entiers i_yr et i_q représentant l'année et par trimestre, respectivement.

Notez que la Fin va représenter minuit le premier jour du trimestre suivant, de sorte que toute sélection doit être basée sur les conditions < "EndOf", pas <= "EndOf".(Ce devrait veiller à ce que tous les temps sur le dernier jour du trimestre sont inclus.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top