Newsgroup: it.comp.lang.visual-basic
Titolo: Datediff

Salve,
ho un database di cui riporto la struttura semplificata:
CODICE Campo1 Campo2 Data
Voglio selezionare tutti i codici che assumono un determinato valore
negli ultimi
100 giorni. Ho scritto una istruzione SQL come segue:
strSQL = "SELECT CODICE, Campo1, Campo2, Data FROM Tabella WHERE _
          (trim(Campo1) LIKE 'B01AC06' OR trim(Campo2) LIKE '026721011')
_
          and DateDiff('d', DATA," & Date & ") <= 100"
cerco quindi di calcolare la differenza in giorni tra il campo DATA e
la data odierna, ma viene fuori il seguente errore:
Syntax error: invalid expression near "B01AC06".
Se metto il campo DATA tra parentesi quadre viene fuori il seguente
errore:
Syntax error: near '[' in ...) and DateDiff('d',[[]DATA],22/10/02)...
Ottengo lo stesso errore se utilizzo la funzione Date (per la data
corrente)
all'interno dell'SQL senza costruire la stringa pezzo per pezzo
cioe' DateDiff('d', DATA,Date) <= 100.
Qualcuno puo' aiutarmi?
Grazie
Donatella

 Qualcuno puo' aiutarmi?
Le cose sono diverse.
Prima di iniziare, perň, dovresti almeno dire che tipo di DB usi (SQL non č
uguale per tutti).
Ciao
Alberto


utilizzo VB6 con una connessione ODBC a Sybase  SQL Anywhere Database Engine
Version 5.5.04 Build #1867
Ciao
Donatella :)

 Version 5.5.04 Build #1867
Non conosco Sybase, per cui posso solo darti l'elenco delle cose che io
controllerei:
1) Verificare che in Sybase SQL esistano le funzioni TRIM, DATEDIFF e DATE
2) Verificare che DATE, se esiste, non chieda le parentesi ()
3) Verificare la sintassi delle date. Nella quasi totalità dei DB, Access
escluso, le date si possono scrivere con 'YYYYMMDD HH.MM.SS' (apicini
compresi nella stringa SQL), per cui un format in VB è utilizzabile
(eventualmente vanno sostituiti i punti con i due punti o viceversa per le
ore)
4) Verificare che Campo1 e Campo2 siano campi alfanumerici e non numerici
Sappimi dire.
Ciao
Alberto

 Sappimi dire.
Ho trovato un manuale di Sybase e per la funzione DateDiff ho trovato quanto
segue:
______________________________________________________________
DATEDIFF ( date-part, date-expression1, date-expression2 )
date-part :
year | quarter | month | week | day | hour | minute | second | millisecond
date-part     Specifies the date-part in which the interval is to be measured.
For more information about date-parts, see Date parts.
date-expression1     The starting date for the interval. This value is
subtracted from date-expression2 to return the number of date-parts between
the two arguments.
date-expression2     The ending date for the interval. Date-expression1 is
subtracted from this value to return the number of date-parts between the two
arguments.
The following statement returns 1:
SELECT datediff( hour, '4:00AM', '5:50AM' )
The following statement returns 102:
SELECT datediff( month, '1987/05/02', '1995/11/15' )
The following statement returns 0:
SELECT datediff( day, '00:00', '23:59' )
The following statement returns 4:
SELECT datediff( day, '1999/07/19 00:00', '1999/07/23 23:59' )
The following statement returns 0:
SELECT datediff( month, '1999/07/19', '1999/07/23' )
The following statement returns 1:
SELECT datediff( month, '1999/07/19', '1999/08/23' )
______________________________________________________________
Alla luce di tutto cio' ho riscritto la mia query come segue:
strSQL = "SELECT CODICE, Campo1, Campo2, Data FROM Tabella WHERE _
          (trim(Campo1) LIKE 'B01AC06' OR trim(Campo2) LIKE '026721011') _
          and DateDiff(day, DATA_OPEN," & Date & ") <= 100"
non ottengo piu' messaggi di errore, ma vengono fuori 0 records!!!!
Il problema e' che nell'help gli esempi riportano valori precisi racchiusi tra
singoli apici, mentre io
i miei valori su cui calcolare la differenza li ho come contenuto di
campi!!!!!!!
Penso che dovro' aggirare l'ostacolo calcolando la differenza in un altro
modo.... ma comeeeeeeee?????
Grazie per il tempo che mi stai dedicando.
Ciao
Donatella :)

 modo.... ma comeeeeeeee?????
Bastavano anche meno eeeeeee...
Allora:
strSQL = "SELECT CODICE, Campo1, Campo2, Data FROM Tabella WHERE _
          (trim(Campo1) LIKE 'B01AC06' OR trim(Campo2) LIKE '026721011') _
          and DateDiff(day, DATA_OPEN,'" & _
        Format(Date, "YYYYMMDD") & "') <= 100"
(notare gli apicini dopo DATAOPEN, e prima di )<=)
Ciao
Alberto


FUNZIONAAAAAAAAAAAAAA
Grazie sei stato superGENTILE!!!
Ciao
Donatella :))))))))

 FUNZIONAAAAAAAAAAAAAA
PS: l'avevo già scritto nel mio post delle 11.19 al punto 3.
Ciao
Alberto

[Donatella Corrado]
 ma comeeeeeeee?????
[albe V財
Bastavano anche meno eeeeeee...
[Donatella Corrado]
FUNZIONAAAAAAAAAAAAAA
Tastiera guasta?
Salutoni
Sergio