Differenza date

di il
8 risposte

Differenza date

Ciao a tutti.
ho il seguente problema:
creata una tabella del tipo:

datainizio tasso
15/08/2014 1,50%
22/08/2014 1,20%

dovrei selezionare tutti i record antecedenti ad una certa data, che inserisco in query col nome di [datacalcolo].
Poi però dovrei calcolare la differenza tra la datacalcolo che ho impostato e la datainizio di ciascun record.
Ho provato ad andare per step... se nella query facessi una differenza con questo codice, tutto funziona:
SELECT Date()-[Table1].[datainizio] AS Expr1
FROM Table1
WHERE (((Table1.datainizio)<[ datacalcolo ]));
però se ci provo come:
SELECT [ datacalcolo ]-[Table1].[datainizio] AS Expr1
FROM Table1
WHERE (((Table1.datainizio)<[ datacalcolo ]));
il risultato è:
Expr1
#Error
#Error

se provo con
SELECT DateDiff('\g',[ datacalcolo ],[Table1].[datainizio]) AS Expr1
FROM Table1
WHERE (((Table1.datainizio)<[ datacalcolo ]));
allora ottengo:
Expr1
#Func!
#Func!

Qualcuno saprebbe aiutarmi?

8 Risposte

  • Re: Differenza date

    galantik ha scritto:


    ...
    però se ci provo come:
    SELECT [ datacalcolo ]-[Table1].[datainizio] AS Expr1
    FROM Table1
    WHERE (((Table1.datainizio)<[ datacalcolo ]));
    ...
    Perché [ datacalcolo ] non viene interpretato come data ma come testo.
    SELECT cdate([ datacalcolo ])-[Table1].[datainizio] AS Expr1
    FROM Table1
    WHERE (((Table1.datainizio)<[ datacalcolo ]));
    in questo modo si chiede ad Access di convertire [ datacalcolo ] in data (ammesso che il formato con il quale viene inserito possa essere trattato come tale). Suggerimento: eviterei gli spazi tra le parentesi quadrate e la parola datacalcolo... così... ad intuito.
  • Re: Differenza date

    Esistono le funzioni specifiche per le Date... mi chiedo perchè non vogliate usare queste...!

    Si deve usare DateDiff o DateAdd a seconda di come si lavora...!

    Le motivazioni sono molte, prima di tutto per velocità esecutiva fare una sottrazione tra 2 Date con il solo simbolo [-] obbliga JET a convertire i dati, per convertirli deve capire di che tipo di dati si tratta, mele, pere o Date...
    Se il programmatore sa quello che fa, e sa che sono date, deve usare DateAdd o DateDiff...!
  • Re: Differenza date

    Grazie Phil,
    così funziona.
    grazie di nuovo per l'aiuto.

    Alex,
    avevo provato ad usare la funzione datediff (come puoi vedere dal codice che avevo riportato sopra) ma mi dava come risultato #Func!.
    Adesso, per curiosità, ho provato a usarla con questa modalità:
    SELECT DateDiff('\g',CDate([ datacalcolo ]),[Table1].[datainizio]) AS Expr1
    FROM Table1
    WHERE (((Table1.datainizio)<[ datacalcolo ]));
    
    quindi inserendo comunque anche la funzione Cdate per convertire il testo in data, ma il risultato non cambia: sempre #Func!
  • Re: Differenza date

    @Alex ha scritto:


    ... deve usare DateAdd o DateDiff...!
    Quindi
    SELECT DateDiff('d',[Table1].[datainizio],CDate([datacalcolo])) AS Expr1
        FROM Table1
        WHERE (((Table1.datainizio)<[datacalcolo]));
    (da me funziona). Occhio all'ordine in cui si inseriscono le date in
    DateDiff('d', data1, data2)
  • Re: Differenza date

    MMmmm mi chiedo perchè generi un Calcolato con una DataDifferenziale... a cosa serve...?
    Basta metterlo nelle Condizioni WHERE...!
    
    SELECT T1.*
    FROM T1
    WHERE T1.MiaData<[DataCalcolo:];
    Il DateAdd(negativo o positivo) si usa se devi aggiunegre un numero di unità [giorni/mesi/anni] ad una data fissa...!
    Il DateDiff per calcolare una differenza in giorni/mesi/anni...

    Ad esempio se vuoi i records le cui date sono entro i 30gg da Oggi allora andrai ad inserire
    
    SELECT T1.*
    FROM T1
    WHERE DateDiff("d",Date(),T1.MiaData) Between 0 And 30
    Attenzione che se scrivi in QBE la sintassi cambia, il [;] al posto della virgola e la definizione dei Parametri è in ITALIANO... quindi [d]-->[g]
  • Re: Differenza date

    Si infatti non vi avevo dato tutti i dati del problema... quello esposto era una parte di una forumla.

    data la tabella:

    data ammontare tasso interesse
    01/01/10 100.000 1%
    01/15/10 120.000 1.2%

    e la forumla è:

    n_giorni/365*ammontare*tasso_interesse

    per cui mi serve il numero di giorni che intercorrono dalla data dell'operazione alla data di valutazione.

    Per inciso adesso funziona anche a me la formula datediff. probabilmente avevo proprio sbagliato l'ordine delle date!

    Grazie a tutti e due!
  • Re: Differenza date

    galantik ha scritto:


    Per inciso adesso funziona anche a me la formula datediff. probabilmente avevo proprio sbagliato l'ordine delle date
    inciso dell'inciso: sbagliando l'ordine delle date non avrebbe dovuto darti errore ma solo un risultato negativo (è quello che è successo a me, per questo l'ho segnalato).
  • Re: Differenza date

    inciso dell'inciso: sbagliando l'ordine delle date non avrebbe dovuto darti errore ma solo un risultato negativo (è quello che è successo a me, per questo l'ho segnalato).
    Risposta all'inciso dell'inciso.
    Hai perfettamente ragione.
    Adesso ho capito tutto: all'inizio non funzionava perché non avevo usato la funzione di conversione cDate. Poi non funzionava perché ho Access installato in inglese. Quindi effettivamente la funzione datediff da me richiede 'd' e non 'g' come avevo messo io.

    Grazie a tutti e due, anche oggi ho fatto un passo avanti verso la suprema conoscenza di Access!!!
Devi accedere o registrarti per scrivere nel forum
8 risposte