Newsgroup: it.comp.lang.visual-basic
Titolo: comparare le date

ci sono funzioni per comparare le date ad esempio:
data1 che sia
compresa tra data2 e data3
nella mia select devo fare una query su dei
record e selezionare solo quelli compresi tra data2 e data3 
ho provato
con <= e >= ma non funzia .
grazie
--------------------------------
Inviato via 
http://usenet.iol.it

con <= e >= ma non funzia .
Devi usare il BETWEEN (spero di averlo scritto corretto, mi sbaglio
sempre...)
Ciao
Aran

 record e selezionare solo quelli compresi tra data2 e data3
Select * FROM MiaTabella Where Data>=#" & data2 & "# AND Data<=#" & data3 &
"#"
CIAO

Senza alcun riferimento a Gianluca (col quale mi scuso), scommettiamo che
anche questo 3d si allunga?
Se le date fossero dei campi testo nella forma "AAAAMMGG":
Select * From Tabella Where prima_data>='20020618' and
ultima_data<='20020619'

> "Claudio Gamberini" [...]:

    Attento pero' che le date le devi passare in formato americano!
Option Explicit
Public Sub Main()
  Dim data2   As Date
  Dim data3   As Date
  Dim sQuery  As String
  data2 = DateSerial(2001, 1, 9)
  data3 = DateSerial(2001, 11, 12)
  sQuery _
    = "SELECT *" _
    & " FROM MiaTabella" _
    & " WHERE" _
    & " Data>=#" & data2 & "#" _
    & " AND" _
    & " Data<=#" & data3 & "#"
  Debug.Print sQuery
  sQuery _
    = "SELECT *" _
    & " FROM MiaTabella" _
    & " WHERE" _
    & " Data>=#" & Format$(data2, "mm/dd/yyyy") & "#" _
    & " AND" _
    & " Data<=#" & Format$(data3, "mm/dd/yyyy") & "#"
  Debug.Print sQuery
End Sub
OUTPUT:
SELECT * FROM MiaTabella WHERE Data>=#09/01/2001# AND Data<=#12/11/2001#
SELECT * FROM MiaTabella WHERE Data>=#01/09/2001# AND Data<=#11/12/2001#
    La prima fa quello che vuole, la seconda fa quello che vuoi.
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------

     Attento pero' che le date le devi passare in formato americano!
Giusto, forse, ma ... CVD

> "Lupo" [...]:

    Io conosco uno che con una matassina di fil di ferro fa tutto, e uno che
se non ha il cacciavite perfetto per la tal vite neanche morto che la svita.
    Ma, con questo, cosa volevo dire?...


 Giusto, forse, ma ... CVD
    Il CVD lo si puo' scrivere dove ci pare. Quel che conta e' cio' che lo
precede. ;)


     Ma, con questo, cosa volevo dire?...
Non lo so, ma c'hai ragione e i fatti ... ti cosano. ;-))) PPP

scusate ma alla fine non ho capito la soluzione giusta
(quella di
Maurizio?).
x lupo: le date nei record sono in formato Data Generica
(Data/ora) di Access.


 (Data/ora) di Access.
    I casi sono due:
    1. o segui le indicazioni di Lupo, e allora definisci il campo data come
stringa (lunga 8 caratteri) e ci scrivi una stringa che rappresenti una data
nel formato YYYYMMDD ed agisci di conseguenza;
    2. oppure continui a comportarti come stai facendo in ordine alla
definizione del campo (Data/ora) e, quando dovrai includere una data in una
stringa sql, la farai precedere e seguire dal carattere delimitatore di data
(nel caso di access il "cancelletto") e fra questi due caratteri porrai la
data convertita in una stringa nel formato data americano.
    Perche', pero', non fai delle prove in maniera da toccare con mano ed
*assimiliare*, rendere *tuo*, il tutto?


*assimiliare*, rendere *tuo*, il tutto?
 
devi aver molta esperienza in
questo newsgroup :)
_________________________________________________
ho programmato un po' e ho risolto così
questa è una funzione che mi
converte le date in modo da compararle
Function convertidata(datagrezza
As String) As String
Dim mese As String * 2
Dim anno As String * 4
Dim
giorno As String * 2
mese = Mid(datagrezza, 4, 2)
anno =
Right(datagrezza, 4)
giorno = Left(datagrezza, 2)
datagrezza = anno &
mese & giorno
convertidata = datagrezza
End Function
e la select l'ho
fatta così:
Set SNAP = appoggio.OpenRecordset("SELECT * FROM
listaordiniq WHERE (listaordiniq.dataam >= " &
convertidata(txtdatainiz.Text) & " and listaordiniq.dataam <= " &
convertidata(txtdatafin.Text) & " )order by listaordiniq.dataord")
dove
dataam è il record della data convertito già in americana: 
dataam:
Right(([dataord]);4) & Mid(([dataord]);4;2) & Left(([dataord]);2)
dataord è la data che mi interessava comparare
GRAZIE A TUTTI


 dataord è la data che mi interessava comparare
    Penso che il discorso vada ripreso dall'inizio e sviluppato passo passo,
senza fretta.


 Se le date fossero dei campi testo nella forma "AAAAMMGG":
Allora perchè non usare un bel Long?
Essendo numerico anche il motore DB ne gioverebbe:
Function MyDate(Byval Y as long, ByVal m as long, byval d as long) As Long
    ' controlli minimi indispensabili per favorire la velocità
    MyDate = ((y mod 10000) * 10000) + ((m mod 12)* 100) + (d mod 31)
End Function
Ciao

 Ciao
ciao, a.

 disse, rialzandosi per l'ennesima volta :)
aveva deciso di vivere per sempre o di morire nel tentativo :)
Ciao