Newsgroup: it.comp.lang.visual-basic
Titolo: [sql] una quwery che mi selezioni solo i dati con la data di oggi

Eccomi ancora dubbioso:
come faccio a selezionare solo i records che in un campo hanno la data di
oggi? Cioè la data di sistema?
Ovviamente voglio usare una query "pura" senza richiami tipo " & Date & ".
Getdate() come si usa?
Ho provato: SELECT * FROM MiaTabella WHERE CampoData = GETDATE()
ed il computer si è offeso.
Ciao e grazie,
Brio

Direi che mi sembre abbastanza normale
che ti sia offeso.
In primis - sempre manca il db con il quale
stai tentanto di dialogare.
In secondo luogo, supponendo che tu stia
usando un qualsiasi database, sparando
semplicemente una query da far eseguire
al tuo oggetto recordset, sempre non
sapendo che db utilizzi, difficilmente
ti potremo dire dove hai sbagliato.
Tanto per dire una cosa del genere
potrebbe funzionarti su sqlserver, ma
non su access.
Terzo, vista la banalità della domanda,
perchè prima non premi quel benedetto
tasto f1 e vedi un pò di articoli che
parlano di sql in generale e poi più
in particolare l'sql del rdbms che vuoi
usare?
Saluti
Andrea

 ed il computer si è offeso.
salve Brio,
vista la funzione che usi , suppongo tu stia usando SqlServer....
la funzione GETDATE() ritorna un valore comprensivo di ora-minuto-secondo,
per cui 2003-03-01 hh:nn:ss; con questa premessa e' molto improbabile che i
dati da te immessi nella tua base dati abbiano la stessa frazione di tempo
di getdate().... ti restano varie soluzioni, tipo le frazioni di data,
SELECT * FROM dbo.Tabella
    WHERE (
        DATEPART(DAY,GETDATE()) = DATEPART(DAY,dbo.Tabella.campo)
        AND DATEPART(MONTH,GETDATE()) = DATEPART(MONTH,dbo.Tabella.campo)
        AND DATEPART(YEAR,GETDATE()) = DATEPART(YEAR,dbo.Tabella.campo)
        )
che confronta solo le frazioni di data,
ovvero il cast
SELECT * FROM dbo.Tabella
    WHERE
        CONVERT(char(10),dbo.Tabella.campo, 112) =  CONVERT(char(10),
GETDATE(),112)
che converte le date in stringa newl format ISO yyyymmdd e fa un confronto
tra stringhe
ed anche l'uso di between tipo
SELECT * FROM dbo.Tabella
WHERE
    dbo.Tabella.campo BETWEEN  CONVERT(char(10), GETDATE(),101) AND
    DATEADD(d, 1, CONVERT(char(10), GETDATE(),101))
che mantiene inalterato il tu campo con data-ora ed applica il filtro di
selezione alle date complete comprese tra 2002/03/01 00:00:00 e 2002/03/02
00:00:00; il cast puo' chiaramente essere modificato per restringere gli
intervalli di tempo....
consiglio anche di leggere un bell'articolo di Nostra Signora Sql Server
Kalen Delaney sulle ambiguita' del tipo datetime
http://www.sqlmag.com/Articles/Index.cfm?ArticleID=9147
saluti
Andrea Montanari
montanar...@virgilio.it
http://www.asql.biz/DbaMgr.shtm
DbaMgr2k ver 0.2.0  -  DbaMgr ver 0.48.0
(my vb6+sql-dmo little try to provide MS MSDE 1.0 and MSDE 2000 a visual
interface)
--------- remove DMO to reply

 vista la funzione che usi , suppongo tu stia usando SqlServer....
Oh mio Dio! No! Ho fatto equivoci? Quando scrivo in VB non uso SqlServer.
Oppure sì? Certamente scrivo in sql.
Ho letto con vera ammirazione ed adesso ci rimugino un po'.
Sulla stessa scia mi trovo un altro problema da "nuovo anno": nel campo
Giorno (mm/dd/yy), quando uso Last(Giorno) mi compare sempre il 12/31/2002.
Evidentemente non considera come "last" i nuovi giorni di gennaio;
probabilmente non tiene conto dell'anno. E normale??? Che faccio?
Grazie 1000!
Brio