277 messaggi dal 13 giugno 2001
Ciao a tutti,

Mi trovo un grosso problema che non riesco ad risolvere.

Devo fare una query di ricerca in un intervallo di date (le date nel db MySql sono scritte in formato seriale), diciamo che fin quì sarebbe solo routine.

Farò qualche esempio di ipotetici dati registrati:


1) Dal: 01/01/2008 (39448) al: xx/xx/xxxx (?)

2) Dal: 10/01/2008 (39457) al: 31/12/2009 (40178)

3) Dal: 03/04/2008 (39541) al: xx/xx/xxxx (?)

etc....


Come sicuramente avrete capito, mi trovo sempre la data di inizio, però quella di fine non è detto che sia sempre presente.

La mia ricerca deve individuare i dati presenti in un intervallo di date. Predendo l'esempio (1°), mi trovo due problemi: il primo è chè mi manca la data di fine, quindi come farei a dire alla query inizia ad esempio dal gg 01/01/2008 (39448) al 30/05/2008 visto che la data di fine non esiste?

Il secondo problema invece, è, come poter ricavare un determinato set di record ricadenti ad esempio alla data dal: 10/01/2008 al 10/01/2008, cioè in un range di date di un giorno, considerando sempre il (1°) esempio, dove la data di inizio è 01/01/2008 (39448).

Non sò se sono riuscita ad spiegarmi bene, nel dubbio chiedetemi pure, ma vi prego, aiutatemiiiiiiiiii!!!!!


PS due precisazione: 1) il db è un MySql, 2) la data memorizzata del db è solo numerica, 01/01/2008 nel db c'è scritto 39448


Grazie....

Carmen
167 messaggi dal 29 dicembre 2002
per ricercare un intervallo di dete puoi utilizzare la clausola between
esempio:

select * from tabella wehere data between '01/01/08' and '31/12/08'
se no hai la data di fine utilizza una data fittizia ad esempio '31/12/2099' no so se ho capito il tuo problema..
Modificato da Luca_spl il 31 ottobre 2008 09.06 -
277 messaggi dal 13 giugno 2001
Infatti, come dicevo sul post la clausola between io la utilizzo. Il range di date le indico io (inizio data, fine data) non posso indicare la data di fine fittizia ad es. 2099, potrei ad esempio utilizzare quella odierna.

Però io, in tanto, non so, se la data di fine esiste o meno: Per cui, come faccio a dirle alla query se la data di fine non esiste sul db (oppure è uguale a 0) ad considerare come data di fine quella del pc (data corrente).

L'altro problemone, era come faccio


per poter ricavare un determinato set di record ricadenti ad esempio nel range di data dal: 10/01/2008 al 10/01/2008, cioè un solo giorno, considerando ad esempio che il record registrato abbia come inizio la data 01/01/2008 come fine 31/12/2008.

Non và, perchè se io dico alla query inizia dal giorno 10/01/2008 al 10/01/2008 non mi trova nulla perchè la data 10/01/2008 non è registrata, però mi serve che funziona, questo perchè il record risulta in un range di 12 mesi (01/01 - 31/12) quindi qualsiasi data io metta che non sia antecedente al 01/01/2008 mi deve sempre riportare quel record...

Lo sò, e un casino, ma solo voi potete aiutarmi....
Modificato da Carmen il 31 ottobre 2008 10.11 -

Carmen
167 messaggi dal 29 dicembre 2002
riuscira a capire la tua situazione non è semplice , vadiamo se ho fatto centro al problema..

se devi ricercare un intervallo di tate ad esempio tutti i record di un mese puoi fare cosi:

select * from nometabella where month(campodata) = '3' and year(campodata) = '2008'

toverai tutti i record del marzo 2008

con la sintassi day(campodata) ricerchi per giorno..
se invece la data nn è presente ed il campo è nullo puoi aggiungere al filtro ' and campodata is null'
vediamo se con queste informazioni riesci a risolvere ....
277 messaggi dal 13 giugno 2001
Negativo.

Ti faccio un altro esempio inizialmente con data inizio e fine:

Io registro nel DB un record con DataInizio 01/01/2008 e DataFine 31/12/2008

Se faccio una query con between in questo esatto range di dati tutto ok.

Il problema è, se ad esempio faccio una iterrogazione con datainizio 10/03/2008 e datafine 10/03/2008 (un solo giorno) non mi ritorna alcun record.

Questo perchè la datainizio risulta 01/01/2008, ma in realtà a me serve che mi ritorni i record corrispondenti, perchè la data 10/03/2008 era nell'intervallo (01/01/xxxx - 31/12/xxxx). Questo serve per capire che se io in data 01/01/2008 o inserito un nuovo record e lo dichiaro valido fino al giorno 31/12/2008 qualsiasi sia il range di date che io metta mi deve ritornare questo record perche in data ad esempio 12/06/2008 il record era attivo, in data 15/08/2008 il record era attivo.

Non sò come spiegarlo....

Carmen
167 messaggi dal 29 dicembre 2002
credo di aver capito, ho fatto tempo fa una cosa del genere per la prenotazione di spazi riunione , e mi serviva di capire se per la data richiesta lo spazio era impegnato.. quindi facevo una ricerca tra una data di inizio e una di fine..
secondo me dovresti eseguire una serie di controlli , se la data di ricerca è maggiore o uguale alla data di inizio oppure se è minore o uguale alla data di fine. la cosa ovviamente vale anche per un solo giorno di intervallo.
277 messaggi dal 13 giugno 2001
Infatti ai centrato il mio problema. Sarò più chiara inerente quello che devo fare.

Si tratta di registrare dei nominativi di personale che lavora in un cantiere edile.

Cosa succede: ad esempio un dipendente entra nel cantiere il giorno 01/04/2008, ma la data di fine rapporto al 99% non viene inserita subito in quanto non si conosce la durata del cantiere.

Per cui se io farei una interrogazione ad esempio dal 01/03/2008 al 01/03/2008 mi deve dire chi stà lavorando in quel giorno nel cantiere.

Io adesso faccio qualche prova, tù potresti farmi qualche esempio di query, tenendo conto del fatto che la data di fine rapporto possa essere vuota?
Modificato da Carmen il 31 ottobre 2008 11.56 -

Carmen
277 messaggi dal 13 giugno 2001
Con una query fatta così sembra funzionare

... WHERE dip.dalser<=" & cdbl(cdate(request("i"))) & " and dip.alser>=" & cdbl(cdate(request("f"))) & "))"


Però non mi ritorna nulla se ad esempio metto la data di fine maggiore di quella registrata, in questo caso mi serviva che mi tornava i dati lo stesso considerando come datafine la data più alta di quella indicata

Carmen

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.