Newsgroup: it.comp.appl.access
Titolo: comparazione date

ciao a tutto il NG
sembrerebbe una faq ma non l'ho trovata sul sitocomune
cercavo un modo affidabile (immagino ce ne sia uno universalmente
riconosciuto come il migliore) per comparare 2 date
in particolare dovrei trovare tutti i record dove il campo "datadocumento"
risale a + di 5 anni fa
per ora mi sono inventato questo:
SELECT [clienti].*
FROM [clienti]
WHERE ((([clienti].TipoDocumento)="Carta D Identità") AND
((DateDiff("d",[clienti].[DataDocumento],Now()))>(365*5)));
ma non mi convince molto
a partire dal fatto che non tiene conto degli anni bisestili
conoscete un metodo + elegante ?
grazie!
Pierpaolo

 ha scritto nel messaggio
news:tTcsa.50262$K35.1...@news2.tin.it...

Prova con questa:
SELECT [clienti].* FROM [clienti] WHERE ((([clienti].TipoDocumento)="Carta D
Identità") AND
[DataDocumento]<
Dateserial(year(now)-5,month(DataDocumento),day(datadocumento))
Al

 ha scritto nel messaggio
news:b8rmpp$4fs$1...@lacerta.tiscalinet.it...

ti ringrazio, ma ora ricevo il messaggio "tipi di dati non corrispondenti
nell'espressione criterio"
eppure il campo datadocumento è un campo "data/ora" con formato "data in
cifre"
SELECT Cliente Gestione Hotel.*
FROM [Cliente Gestione Hotel]
WHERE
(
    (
        (
            [Cliente Gestione Hotel].[TipoDocumento]="Carta D Identità"
        )
        And
        (
            [DataDocumento]
            <
            Dateserial  (     (year(Now()) -5),    month([DataDocumento]),
day([DataDocumento])        )
        )
    )
);
x scrupolo ho levato anche il controllo sul tipodocumento, niente
sostituendo (year(Now()) -5),    month([DataDocumento]),
day([DataDocumento])  con 11,05,1998 funziona
allora ho provato
SELECT Cliente Gestione Hotel.*, Dateserial  (     (year(Now()) -5),
month([DataDocumento]), day([DataDocumento])        ) as miadata
e sostituendo in basso col campo miadata, ma me lo chiede come fosse una
query parametrica :/
boh!
Pierpaolo

 wrote in message tTcsa.50262$K35.1...@news2.tin.it...

Prova così:
SELECT [clienti].*
FROM [clienti]
WHERE ((([clienti].TipoDocumento)="Carta D Identità") AND [DataDocumento] <
Format(DateSerial(Year(Now())-5, Month([DataDocumento]),
Day([DataDocumento]))));
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

sembra assurdo, ma una banalissima query di comparazione date non funziona
come previsto:
SELECT [Cliente Gestione Hotel].*
FROM [Cliente Gestione Hotel]
WHERE (([Cliente Gestione Hotel].[DataUltimoArrivo]<#7/5/2003#));
il problema è che non mi restituisce i dati con data "minore" ma quelli con
data "minore o uguale"
ho notato poi che una volta salvata e riaperta, la trovo modificata in
questo:
SELECT [Cliente Gestione Hotel].*
FROM [Cliente Gestione Hotel]
WHERE ((([Cliente Gestione Hotel].DataUltimoArrivo)<#7/5/2003#));
boh!
c'è forse in operatore apposito che devo usare ?
tipo "isLess" (che ho appena inventato)
Pierpaolo
ps: m'è appena venuto in mente che potrei provare con datediff(), ma anche
se funzionasse mi piacerebbe sapere cosa c'era che non andava in questa
query decisamente intuitiva
forse access si confonde con le date in formato americano ? (05/07/2003)
mah, mi pare strano

 ha scritto nel messaggio
news:jA7ua.104631$K35.2...@news2.tin.it...

Così come l'hai scritta la query seleziona i record la cui DataUltimoArrivo
è minore del 5 luglio 2003; se vuoi visualizzare quelli minori al 7 maggio
2003 devi scrivere ... <#5/7/2003# ; insomma la costante data, visto che
stai usandi il linguaggio SQL, la devi scrivere nella forma m/d/yyyy .
Quanto alla trasformazione che Access ha operato, non ha fatto altro che
eliminare le parentesi quadre superflue (visto che il nome campo
DataUltimoArrivo è composto da una sola parola, non è necessario
racchiuderlo tra parentesi quadre).


 ha scritto nel messaggio
news:jA7ua.104631$K35.2...@news2.tin.it...


 Occhio che il campo non sia data / ora.. 5/7/2003 9.20 è minore di
5/7/2003
Occhio che non stai scrivendo correttamente DOPO il quoting!!!
Antonio