Newsgroup: it.comp.lang.visual-basic
Titolo: SQL Server, problema con date

Buongiorno a Tutti!!!
Ho una select, la seguente:
select * from tbazioni
where data >=  '29/01/2003' and  data <= '05/02/2003'
oppure scritta così:
select * from tbazioni
where data between '29/01/2003' and '05/02/2003'
che non funziona! Non riesco a leggere tutti i record nella tabella in
questo intervallo di tempo. 
Il problema sta nel fatto che sia che uso between, che non mi comprende i
record nell'intervallo di tempo da me impostato, sia che uso <= non riesco
a vedere i record del 5/02.
Ma perchè succede questo? Qualcuno può auitarmi?
Grazie Mille!!!
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Probabilmente è un problema di date in formato italiano/inglese
dell'utente con cui ti colleghi al SQL server.
Vedrai che se giri le date in formato MM/dd/yyyy funziona....
Ciao
Andrea

 where data >=  '29/01/2003' and  data <= '05/02/2003'
uhm..... come prima cosa segnalerei il problema del formato della data, visto
che la seconda dovrebbe corrispondere al 2 maggio 2003..... ma pare che il tuo
problema non sia questo.
Come seconda cosa direi che se il campo data è un campo di tipo date/time e
contiene anche l'ora, tutti i dati relativi al giorno 05/02/2003 hanno un valore
superiore a 02/02/2003 quindi vengono esclusi dal filtro
--
Salutoni
Sergio

 Vedrai che se giri le date in formato MM/dd/yyyy funziona....
Certo. Poi quando cambia l'utente, smette di funzionare di nuovo...
Ripeto per la (credo) milionesima volta:
A parte Access, le date coi DB vanno sempre formattate come
yyyymmdd
Funziona sempre, con Sql-Server, Oracle, MySql, ecc...
Ciao
Alberto

 Vedrai che se giri le date in formato MM/dd/yyyy funziona....
Se fosse un problema di formato allora perchè  i dati del 29/01/2003 li
prende? 


 esclusi dal filtro
ovviamente volevo scrivere "hanno un valore superiore a 05/02/2003"
--
Salutoni
Sergio

se utilizzi DB seri, utilizza la funzione CONVERT.
gli dici come gli passi la data e ti togli tutti i problemi!
cerca convert nell'help T-SQL del query analyzer
ciao
Daniele

 yyyymmdd
...e se poi devi fare una store procedure che usa le date (dateadd
,datediff) ecc..
come la metti? ...  dateadd(d,(convert(date,substr(xx) + substr(xx) ...))
non mi sembramolto pratico...
.. e poi non è che puoi sempre modificare il database a piacimento tuo...
Io ho sempre usato le date in formato date/time e mi sono fatto delle
funzioncine
che mi gestiscono tutto, ricavando il formato delle date dalla connessione,
l'utente, file di configurazione ecc...  E ti assicuro che fatto lo sforzo
una volta,
funziona tutto bene!
Ciao
Andrea

 funziona tutto bene!
Secondo me hai fatto uno sforzo inutile, per non dire pericoloso.
Ad esempio, con Sql-Server 7 determinate impostazioni erano a livello di DB,
con Sql-Server 2000 sono invece a livello di db, tabella, addirittura di
singola colonna.
Cosa fai? Cambi funzioncina a seconda della versione di Sql-Server a cui ti
connetti?
Il formato 'yyyymmdd hh:mm:ss.nnn' vale sempre, per ogni versione, e
addirittura ti consente ti scegliere il db a cui collegarti, senza dover
cambiare niente nel codice.
Ciao
Alberto

 Select DataAdd(d,'20030207',3)
Emh... ovviamente volevo scrivere:
Select DateAdd(d,3,'20030207')
Ciao
Alberto


Se utilizzi db seri, gli passi la data nel formato standard yyyymmdd e ti
dimentichi ogni problema di impostazioni locali.
Alberto

 cambiare niente nel codice.
Ma come tipo di colonna? Usi date o nvarchar?
Io credevo che non funzionasse sulle colonne di tipo datetime ecc.. allora
la cosa cambia di molto!
Se è così mi cambi la vita!
Grazie
Ciao
Andrea

 Se è così mi cambi la vita!
In realtà, questo discorso delle date è un refrain abbastanza frequente.
Però, se ci fai caso, quando io ho postato la cosa, ti sei impuntato e hai
espresso obiezioni senza verificare quanto io avevo detto.
Questo, se io non avessi insistito, ti avrebbe portato a non imparare una
cosa nuova, che ritengo fondamentale per chi sviluppa con Sql-Server.
Ciao
Alberto

Ragazzi, ho risolto!
La funzione Dateadd, va bene, però nel codice non ho usato quella.
Ho fatto così:
Dim miaDataApp as Date, miaDatafinale as String 
miaDataApp = (dtAl.Value + 1)  'aggiungo 1 giorno alla data 
miaDataFinale = Format(Day(miaDataApp) & "/" & Month(dtAl.Value) & "/" &
Year(dtAl.Value), "dd/mm/yyyy")  '(dtAl è un dtpicker)
che poi è lo stesso che usare DateAdd:)
Grazie Mille a Tutti per l'aiuto!!! 
SMACK!!!!


 che poi è lo stesso che usare DateAdd:)
Quasi.
Prova a farlo con l'ultimo giorno del mese, poi mi sai dire se funziona :-(
Ciao
Alberto

 espresso obiezioni senza verificare quanto io avevo detto.
...
Grazie, ricambierò se possibile quanto prima.
Ciao
Andrea

 Prova a farlo con l'ultimo giorno del mese, poi mi sai dire se funziona :-(
 Ho provato a farlo e funziona, perchè prima aggiungo 1 alla data, e poi
la trasformo in stringa. Se ad esempio ho il 31/01/2003, non passo a 32,
ma passo a 01/02/2003 e poi lo converto in stringa:)


 ma passo a 01/02/2003 e poi lo converto in stringa:)
No.
Con la funzione che hai postato non fai assolutamente questo.
Se hai cambiato la funzione rispetto a quella da te postata, forse fai così,
ma con quella lì sicuramente no.
E, se veramente hai provato, non capisco come faccia a funzionare
correttamente.
Alberto

 correttamente.
Hai ragione scusa, perchè prima ho scritto :
miaDataApp = (dtAl.Value + 1)  'aggiungo 1 giorno alla data Al
miaDataFinale = Format(Day(miaDataApp) & "/" & Month(dtAl.Value) & "/" &
Year(dtAl.Value), "dd/mm/yyyy")
così giustamente se seleziono nel dtpicker 31/01/2003, miaDataFinale è = a
01/01/2003
l'istruzione esatta è:
miaDataApp = (dtAl.Value + 1)  'aggiungo 1 giorno alla data Al
miaDataFinale = Format(Day(miaDataApp) & "/" & Month(miaDataApp) & "/" &
Year(miaDataApp), "dd/mm/yyyy")
Mi spiace per il codice errato che ho scritto prima:(
