Mysql e datetime, timestamp, query between

di il
3 risposte

Mysql e datetime, timestamp, query between

Buongiorno a tutti, vorrei chiedere un aiuto se possibile.
Ho un database mysql con dei campi in formato double per gestire le date.
Ora sono diventati campi timestamp.
nel momento in cui vengono inseriti i dati, alla query che fa l insert viene passato il parametro data come .value.
per capirci: parambyname('pData').value := now.

il formato della data in delphi viene restituito come 18.02.2021 10:12:50.

Nel database pero' mi inserisce 2021-02-18 10:12:50

Il mio problema viene pero' nel momento in cui devo estrapolare dei dati con una data compresa tra due valori.

select * from tabella where campodate between 18.02.2021 10:12:50 and 18.02.2021 10:15:50

alla query select passo i parametri col metodo dell insert, cioe parambyname('pDaData').value := DaData

Insomma alla fine non mi estrae nulla perché il formato é appunto diverso, come posso risolvere?

ho provato anche con parambyname('pData').asdatetime ma il risultato é lo stesso.

como posso allineare i due formati?, considerando che il programma ed il database potrebbero giarare su pc configurati in maniera differente.

Vi ringrazio.

3 Risposte

  • Re: Mysql e datetime, timestamp, query between

    Alla fine ho risolto modificando la query cosi:

    select * from tabella
    where
    DATE_FORMAT(campotimestamp,'%d.%m.%d %H:%i:%s')
    between CAST(:pDaData as datetime ) and CAST(:pAData as datetime )

    dove i parametri della query sono
    parambyname('pDaData').asstring := datetimetostr(Dadata)



    cosi me le estrai ma onestamente mi sembra un po un work around del problema, passare come stringa una data convertita non mi sembre proprio la pi'bella delle cose.
  • Re: Mysql e datetime, timestamp, query between

    yarendil ha scritto:


    il formato della data in delphi viene restituito come 18.02.2021 10:12:50.
    Nel database pero' mi inserisce 2021-02-18 10:12:50
    Il valore è lo stesso, non sta inserendo due valori diversi: semplicemente, il programma di amministrazione del DB e il programma Delphi stanno adottando due formati differenti nella rappresentazione del valore che però è probabilmente univoco per entrambi.

    A mio avviso, devi fare uso dei parametri, impostarli tutti come valore "data/ora" (AsDateTime) nel codice ed evitare poi le conversioni nella query in formato testuale che può finire per comparare stringhe diverse da quelle attese.
  • Re: Mysql e datetime, timestamp, query between

    Ti ringrazio, gentilissimo, in effetti bastava usare asdatetime piuttosto che un generico "value".
Devi accedere o registrarti per scrivere nel forum
3 risposte