Warning: count(): Parameter must be an array or an object that implements Countable in /membri/oraclefaq/qa-include/app/format.php on line 384
Ricavare tutte le settimane da più intervalli di date - Oracle FAQ - Il forum italiano su oracle
0 voti
4.8k visite
quesito posto in SQL e PLSQL da (120 punti)

Un saluto a tutti,

avrei la necessità di ricavarmi tutte le settimane da una serie di intervalli di date. Cerco di spiegarmi meglio:

tabella A:

codice

dalladata

alladata

 

select dalladata, alladata from A where codice=:par

dalladata       alladata

26/08/2013    15/09/2013
09/09/2013    29/09/2013
04/11/2013    24/11/2013
 

che trasformato in settimane

select to_char(dalladata,'yyyyiw') dallaset, to_char(alladata,'yyyyiw') allaset from A where codice=:par

dallaset  allaset

201335    201337
201337    201339
201345    201347

quello che vorrei ottenere è la lista di tutte le settimane comprese quella tra dallaset / allaset

201335

201336  --> questa  o queste se ce ne fossero

201337

 

201337

201338   --> questa  o queste se ce ne fossero

201339


201345  

201346  --> questa  o queste se ce ne fossero

201347
 

Ovviamente le date potrebbero essere a cavallo tra un anno e il successivo/precedente.

Qualche idea ?

 

Grazie,

Andrea

 

1 Risposta

0 voti
risposta inviata da (2.4k punti)

Sicuramente ci sono soluzioni migliori ma potresti provare così:

WITH intervello AS(
 SELECT LEVEL AS num
   FROM dual
CONNECT BY LEVEL <= (SELECT alladata - dalladata
                      FROM a
                     WHERE codice = 1) + 1)
SELECT DISTINCT TO_CHAR(dalladata + num -1,'IYYYIW') AS settimana
  FROM a, intervello
 WHERE codice = 1
 ORDER BY settimana ASC;
 
Quello che non mi piace è il fatto che è necessario inserire 2 volte il codice, per il resto mi sembra fare il suo dovere.
 
Attenzione che il formato YYYYIW della funzione TO_CHAR può farti qualche sorpresa inattesa a cavallo dell'anno.
 
Ad esempio il 31 Dicembre 2013 ti verrebbe restituito come 201301, ti consiglio quindi di utilizzare il formato IYYYIW in modo da utilizzare lo standard ISO anche sull'anno.
 
Ah, dimenticato! La query l'ho provata su Oracle11g, non sono sicuro che in versioni precedenti si possa utilizzare l'alias della colonna sull'order by.

Domande correlate


Warning: count(): Parameter must be an array or an object that implements Countable in /membri/oraclefaq/qa-include/app/format.php on line 384

Warning: count(): Parameter must be an array or an object that implements Countable in /membri/oraclefaq/qa-include/app/format.php on line 384

Warning: count(): Parameter must be an array or an object that implements Countable in /membri/oraclefaq/qa-include/app/format.php on line 384

Warning: count(): Parameter must be an array or an object that implements Countable in /membri/oraclefaq/qa-include/app/format.php on line 384

Warning: count(): Parameter must be an array or an object that implements Countable in /membri/oraclefaq/qa-include/app/format.php on line 384
+1 voto
1 risposta 1.1k visite
0 voti
0 risposte 3.2k visite
0 voti
0 risposte 4.6k visite
0 voti
0 risposte 65.3k visite
quesito posto 7 Dicembre 2013 in DBA da carlo10 (2.4k punti)
0 voti
0 risposte 5.5k visite
quesito posto 2 Dicembre 2013 in Lavoro da carlo10 (2.4k punti)
...