21 messaggi dal 06 settembre 2002
www.xhtmlstrict.it
Salve a tutti.
Vorrei sapere come sia possibile selezionare da un database tutte le date
che risultano maggiori del giorno corrente. Io uso questo codice, ma non
funziona:

"SELECT * FROM calendario WHERE (datanr > "& date() &") ORDER BY datanr;"

Come posso fare?
Aiutatemi!
Mi rispondete per favore via email, se possibile?
peste1@tin.it

Stefano

Stefano Pessina
33 messaggi dal 06 settembre 2002
Ciao Peste, prova così:

"SELECT * FROM calendario WHERE datanr > "& cdbl(date()) & "ORDER BY datanr"

in pratica trasforma il campo data in numero a doppia precisione e confrontando i numeri funziona...

Ciao, Fabio

fcopellino@libero.it



1.605 messaggi dal 06 settembre 2002
prova così
"SELECT * FROM calendario WHERE (datanr > getdate()) ORDER BY datanr"

se il DB è access allora prova così

"SELECT * FROM calendario WHERE (datanr > now()) ORDER BY datanr"



FORZA LA MAGICA ROMA

FORZA LA MAGICA ROMA
5 messaggi dal 30 ottobre 2001
una variante alla domanda: e se invece della data corrente io volessi fare un confronto con una data di cui dispongo giorno, mese e anno in tre variabili distinte?
grazie
ciao
stefano (ma non quello di prima  )
1.605 messaggi dal 06 settembre 2002
potresti fare ad esempio così

"select * from calendario
where day(datanr ) > " & varGiorno & " and month(datanr ) > " & varMese & " and year(datanr ) > " & varAnno

in questo modo non avrai problemi con i differenti formati di data

FORZA LA MAGICA ROMA

FORZA LA MAGICA ROMA
1.818 messaggi dal 21 giugno 2001
Contributi
<b>albis ha scritto:</b>
<BLOCKQUOTE id=quote><font size=1 face="Arial" id=quote><hr height=1 noshade id=quote>
potresti fare ad esempio così

"select * from calendario
where day(datanr ) &gt; " & varGiorno & " and month(datanr ) &gt; " & varMese & " and year(datanr ) &gt; " & varAnno

in questo modo non avrai problemi con i differenti formati di data

FORZA LA MAGICA ROMA

<hr height=1 noshade id=quote></BLOCKQUOTE id=quote></font id=quote><font face="Arial" size=2 id=quote>

Non sono convinto che funzioni... Mettendo in AND le tre parti della data elimini dalla ricerca anche dei record validi.
Esempio:
data di confronto 15/10/2001
Facendo la query per trovare tutte le date maggiori di questa confrontando singolarmente Giorno/Mese/Anno ti perdi i giorni da 1 a 14 e i mesi da 1 a 9 degli anni superiori al 2001:
01/11/2002 ad esempio è una data che, nonostante sia maggiore della data di riferimento, non soddisfa la query.

Prova con questa query:

<code>
Dim DataConfronto
SELECT * FROM Calendario WHERE datanr&gt;" & "#" & DataConfronto & "#"
</code>

Cia Cia
hyppos

www.teatrolabaracca.com

<code>
|--------------------------------------|
|in giro torte sol ciclos et rotor igni|
|--------------------------------------|
</code>

hyppos
<code> in giro torte sol ciclos et rotor igni</code>
5 messaggi dal 30 ottobre 2001
anche secondo me non è corretto il comando SQL fatto in questo modo; però modificando il WHERE in questo modo

(year(datanr) &gt; varAnno )
OR (year(datanr) = varAnno AND month(datanr) &gt; varMese )
OR (year(datanr) = varAnno AND month(datanr) = varMese AND day(datanr) &gt; varGiorno )

dovrebbe funzionare. Che dite?

Hyppos, per usare il tuo script invece, come dovrei settare la variabile DataConfronto avendo il giorno, il mese e l'anno in 3 variabili distinte?
(scusate ma non conosco molto bene ASP e tutte le sue funzioni)
grazie
ciao


1.605 messaggi dal 06 settembre 2002
ha ragione hyppos mi ero sbagliato
però nel modo che dice lui si problemi per le eventuali differenze di formattazione delle date
ad esempio la data è inserita nel formato italiano
(gg/mm/aaaa)
mentre il db si aspetta la data nel formato inglese
(mm/gg/aaaa)

quando eseguo quary preferisco sempre utilizzare i parametri per evitare problemi (è comunque l'approccio più corretto )
quindi la stringa diventa
"SELECT * FROM Calendario WHERE datanr&gt;?"

e quando passi il parametro
lo fai passando una variabile di tipo data
costruita con una funzione di questo tipo
es:
presupponendo che la data sia inserita nel formato italiano
function RestData(strData )
Dim lngDay
Dim lngMonth
Dim strYear

Dim dtData As Date

strYear = Right(strData, 4)
lngMonth = CLng(Mid(strData, 4, 2))
lngDay = CLng(Left(strData, 2))

dtData = CDate("1/1/" & strYear)
dtData = DateAdd("m", (lngMonth - 1), dtData)
dtData = DateAdd("d", (lngDay - 1), dtData)
RestData = dtData
End Sub

costruendo la data con il dateadd si è sicuri che venga restituita nel formato del server

che può essere comunque diverso da quello del db
ma essendo passata come parametro di tipo data
viene passato un ogetto di tipo data che prescinde da eventuali differenze di formattazione

l'utilizzo di parametri è sempre l'approccio più corretto e sicuro


FORZA LA MAGICA ROMA

FORZA LA MAGICA ROMA

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.