Confronto date in ACCESS

di il
8 risposte

Confronto date in ACCESS

Salve a tutti, in un db Access in formato testo ho memorizzato le seguenti date nel seguente formato dd/mm/yyyy
la query che ho scritto è questa
SELECT (Sum(prezzo_vendita)-Sum(prezzo_acquisto)) AS diff
FROM bolla_cl
WHERE magazzino ='Mafalda' and data_ven >= '01/01/2021' AND data_ven < '07/04/2021';
Funzionerebbe correttamente se non riporto il campo data_ven. Ho provato ad usare anche l operatore BETWEEN al posto di > e < ma stessa cosa.
Praticamente è il guadagno in un magazzino in un certo periodo.
Accetto consigli e soluzioni

8 Risposte

  • Re: Confronto date in ACCESS

    Ma perché una data in un campo testo? Così facendo, i confronti saranno sempre "sbagliati", nel senso che essendo stringhe otterresti un ordinamento tipo:
    
    01/01/2021
    01/01/2022
    01/02/2021
    01/03/2021
    ...
    31/10/2021
    31/12/2021
    
    che per le stringhe ha perfettamente senso.
  • Re: Confronto date in ACCESS

    Posso cambiare il formato? ma quel codice che ho scritto funzionerebbe in un campo Data/ora?
  • Re: Confronto date in ACCESS

    rogerino88 ha scritto:


    Salve a tutti, in un db Access in formato testo ho memorizzato le seguenti date nel seguente formato dd/mm/yyyy
    la query che ho scritto è questa [...]
    Praticamente è il guadagno in un magazzino in un certo periodo.
    Accetto consigli e soluzioni
    Devi usare i parametri (ne abbiamo parlato spesso in molti forum).

    Ciao!
  • Re: Confronto date in ACCESS

    Non ho capito. io sto scrivendo direttamente la query sull ACCESS e anche cambiando il formato da testo a data/ora la query non funziona correttamente perchè il risultato è nullo, invece dovrebbe ridare 45. Puoi postarmi la query corretta?
  • Re: Confronto date in ACCESS

    rogerino88 ha scritto:


    ...io sto scrivendo direttamente la query sull ACCESS...
    E cosa ci fai nella sezione C#?

    rogerino88 ha scritto:


    Puoi postarmi la query corretta?
    Non funziona così il forum. Tu posti un problema e di quello si discute, non si risolvono problemi conto terzi. C'è chi lo fa di mestiere.

    Sul fatto che tu possa cambiare il formato della colonna, bisogna capire se il DB lo hai fatto tu o no. Se poi stai estrapolando i dati tramite C# puoi sempre affidare le somme ad un ciclo sul DataReader (anche se non mi sembra la maniera migliore di procedere).
  • Re: Confronto date in ACCESS

    rogerino88 ha scritto:


    io sto scrivendo direttamente la query sull ACCESS
    Avevi postato nell'area dedicata a C#.

    rogerino88 ha scritto:


    anche cambiando il formato da testo a data/ora la query non funziona correttamente perchè il risultato è nullo, invece dovrebbe ridare 45. Puoi postarmi la query corretta?
    Non potendo risalire ai dati in tuo possesso, né alla struttura del DB, non saprei dirti: fornisci informazioni sul tipo dei campi della tabella in questione, metti un esempio di dati, aggiungi insomma qualche dettaglio così da consentirci di capire qual è il problema specifico.
  • Re: Confronto date in ACCESS

    La query dovrebbe essere scritta nel seguente modo:
    
    SELECT (Sum(prezzo_vendita)-Sum(prezzo_acquisto)) AS diff
    FROM bolla_cl
    WHERE magazzino ='Mafalda' and data_ven Between #01/01/2021# AND #07/04/2021#;
    
    fare attenzione però che le date se inserite direttamente nell'espressione Sql debbono essere scritte nel formato anglosassone ovvero mese/giorno/anno
  • Re: Confronto date in ACCESS

    Fermo restando la soluzione dei Parameters giustamente esposta da [Alka], che però non copre sempre tutte le opzioni, una di queste con Access sono le Maschere Associate ad una Query SQL, che non può avere i Parameters a meno di non aprire indipendentemente un Recorset ed associarlo ExPost... fattibile ma non nativo e normale per Access, invece ovvio e scontato se si usa un Recorset.

    Aggiungo quindi una ulteriore opzione:
    
    "SELECT (Sum(prezzo_vendita)-Sum(prezzo_acquisto)) AS diff
    FROM bolla_cl
    WHERE magazzino ='Mafalda' and data_ven Between " & clng(Me.DataINI) & " AND " & clng(Me.DataEND)
    Se le date contengono o devono contenere [hh:mm:ss] allora serve l'uso di DBL per includere i decimali e di STR(...) per convertire il decimale in modo comprensibile tenendo conto dei Regional Settings.
    
    "SELECT (Sum(prezzo_vendita)-Sum(prezzo_acquisto)) AS diff
    FROM bolla_cl
    WHERE magazzino ='Mafalda' and data_ven Between " & str(cdbl(Me.DataINI)) & " AND " & str(cdbl(Me.DataEND))
Devi accedere o registrarti per scrivere nel forum
8 risposte