SQL Data da delphi

di Anonimizzato30302 il
5 risposte
Buon giorno,
volevo sapere come posso aggiungere una condizione in un sql scritto tramite il codice per prendere il mese di riferimento tramite una variabile (esempio x = 1/09/2021) in questo caso devo prendere tutto settembre
che condizione potrei fare per richiedere a sql tutto il mese?

ah x prende il valore del parametro passato dalla function della query

grazie mille

5 Risposte

  • f.developer ha scritto:


    volevo sapere come posso aggiungere una condizione in un sql scritto tramite il codice per prendere il mese di riferimento tramite una variabile (esempio x = 1/09/2021) in questo caso devo prendere tutto settembre
    che condizione potrei fare per richiedere a sql tutto il mese?
    Innanzitutto, devi trasformare tutti i valori che sono utilizzati nello statement SQL in parametri, ovvero devi sostituirli con un "segnaposto" che andrai poi a valorizzare prima di eseguire la query e che di fatto consente di evitare concatenamenti nel comando e permette di riutilizzare sempre la stessa query, variando appunto solamente i valori assegnati ai parametri.

    Il ragionamento che dovrai fare è questo: tutti i record di settembre, ad esempio, sono compresi nell'intervallo che va dal primo giorno del mese (01/09) all'ultimo giorno (30/09), pertanto dovrai filtrare quei record che nel campo con la data di riferimento hanno un valore compreso nel range indicato.

    Un esempio in pseudo-SQL:
    
    SELECT FROM Tabella WHERE (Data >= :Inizio) AND (Data <= :Fine)
    
    Prima di eseguirla, devi impostare Inizio e Fine correttamente, come spiegato sopra.

    Se hai difficoltà nel trovare il numero dell'ultimo giorno del mese di riferimento, un espediente è quello di trovare il primo giorno del mese successivo e sottrarre - ad esempio - un millisecondo da quella data, oppure mantenere comunque il primo giorno del mese seguente come data di fine dell'intervallo, ma usando la condizione (Data < :Fine), ovvero togliendo il caso di uguaglianza e verificando solo che sia minore.

    Ciao!
  • Grazie.
    domanda: ma se io non sò so esattamente il mese ma solo all'esecuzione della query come posso impostare i fattori di fine soprattutto la fine
  • f.developer ha scritto:


    ma se io non sò so esattamente il mese ma solo all'esecuzione della query come posso impostare i fattori di fine soprattutto la fine
    Scusa, come fai a filtrare i dati per un mese di riferimento se non sai qual è quel mese?
    Lo scegli a caso?
  • No prendo il valore di un TDateTimePiker e lo passo come variabile nella function che fa la query
  • f.developer ha scritto:


    No prendo il valore di un TDateTimePiker e lo passo come variabile nella function che fa la query
    Se il valore acquisito dall'utente è un TDateTime, come probabile che sia, basta estrarre dallo stesso le componenti di anno, mese, giorno, ecc. usando la funzione e, usando l'informazione del mese, creare le due date di inizio e fine dell'intervallo (quindi il primo del mese selezionato - o meglio estratto dalla data/ora selezionata - e il primo del mese successivo a questo).

    A questo punto, alla funzione che esegue la query (o direttamente nella stessa, a seconda di come si è scelto di scrivere il codice) si esegue la query filtrando i record per la data compresa tra quella di inizio e fine precedentemente determinate.
Devi accedere o registrarti per scrivere nel forum
5 risposte