Newsgroup: it.comp.software.database
Titolo: ricerca eventi dato mese-anno

La mia tabella e' fatta cosi':
                        inizio   	  fine
 	2004-06-15 	2004-07-25
 	2004-06-10 	2004-07-18
 	2004-06-08 	2004-07-25
 	2004-05-14 	2004-07-25
 	2004-04-02 	2004-06-13
 	2004-03-25 	2004-10-24
 	2004-02-17 	2004-05-30
 	2004-05-11 	2004-05-30
 	2004-04-14 	2004-05-02
 	2004-04-06 	2004-04-25
 	2004-04-14 	2004-04-28
 	2004-04-06 	2004-04-28
 	2004-04-14 	2004-04-19
 	2004-04-14 	2004-04-19
 	2001-10-18 	2004-03-28
 	2004-02-05 	2004-03-28
Cerco una query che dati mese e anno mi estragga le righe in cui la
data di inizio e la data di fine comprendono quel mese-anno
Il BETWEEN non funziona:
"che data ci metto ?"  BETWEEN inizio AND fine

Il between ha sempre funzionato

o...@tiscali.it
 ha scritto:

Come non ti funziona?
Che istruzione utilizzi per convertire le due date in input?
-- 
                Sottoscrivi anche tu
                free.it.animali.cani.molosso
        \ | /
        (@ @)
  ---o00-(_)-00o--------------------------------------------

 data di inizio e la data di fine comprendono quel mese-anno
Se lo deve comprendere interamente basta:
(inizio <= primo-giorno-mese AND
fine >= ultimo-giorno-mese)
se lo può comprendere anche parzialmente, devi aggiungere:
OR (inizio BETWEEN primo-giorno-mese AND ultimo-giorno-mese) OR
(fine BETWEEN primo-giorno-mese AND ultimo-giorno-mese)
I database hanno funzioni SQL per calcolare l'ultimo giorno del mese (il
primo non sto a dirtelo).

 primo non sto a dirtelo).
Dice che "non gli funziona" il between.
Ovviamente e' impossibile.
Sicuramente il formato della data (archiviata) non e'
compatibile con il formato data che lui imposta per la ricerca.
Imho lui fa una ricerca per between 2004-01-01 and 2004-12-31
ma il formato interno non e' del tipo "YYYY-MM-DD".
Magari mi sbaglio :-)


 Ovviamente e' impossibile.
Secondo me, dice che "non gli funziona" per dire che ha provato ad
usarlo per risolvere la sua query e non c'è riuscito.
Infatti lui non deve verificare se una data è compresa in un intervallo,
bensì se un intervallo è compreso in un intervallo. Quindi la between
immediata non è idonea. O forse si, trasformando tutte le date al primo
giorno del mese di appartenenza e giocando su quelle.

La seguente query:
SELECT * FROM `mostre_eventi` WHERE ('2003-12' BETWEEN inizio AND fine
) ORDER BY fine DESC
non mi estrae i seguenti record:
inizio                      fine
2003-12-12  	2004-01-25
2003-12-05  	2003-12-14
2003-10-17  	2003-12-21
mi estrae i seguenti:
 inizio   	                   fine
2001-10-18 	2004-03-28
2003-09-30 	2004-01-11
2003-09-19 	2004-01-04
2003-10-17 	2003-12-21
2003-09-23 	2003-12-21
2003-09-30 	2003-12-21
Vorrei chiedervi se nella query la stringa '2003-12'  viene
correttamente interpretata come dicembre 2003 ?

Che database usi?
la query e' in generale sbagliata, poi i database fanno in generale
delle conversioni implicite tra i dati per cui penso tu stia
sostanzialmente comparando stringhe;
per cui '2003-12-01' e' > '2003-12'
la tua query dovrebbe estrarre i records che iniziano prima di dicembre
e terminano dopo di novembre
direi che ad esempio questo dovrebbe estrarlo:
2003-10-17      2003-12-21
(l'hai riportato sia in un elenco che nell'altro)
se sapessi cosa vuoi fare potrei anche dirti come farlo, ma da due
elenchi *sbagliati* dei dati che ti aspetti come puoi pretendere che ci
arrivi da solo?

ho fatto cosi' 
WHERE inizio <= LAST_DAY('.'\''.$data.'\''.') AND fine >=
\''.$data.'\'  '