Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [MYSQL] Problema con query su date

    Salve,
    come da oggetto ho un piccolo problema con una query che dovrebbe restituirmi dei records rientranti in un determinato intervallo temporale.
    In pratica sto creando un piccolo di db di eventi per ogniuno dei quale è specificata una data di inizio e una di fine (ora compresa).
    Quello che voglio fare è:

    - prendermi gli eventi presenti, per una data specificata, che sono iniziati prima dell'ora passata in input e che finiscono nella stessa data o successivamente.

    - prendermi gli eventi presenti, per una data specificata, che iniziano dopo l'ora passata in input e che finiscono nella stessa data o successivamente.

    Supponiamo essere questa "2010-09-10 23:00:00" la data/ora passata in input e che nel mio db ho i seguenti records:

    +---------+-------------------------+-------------------------+
    | NAME | START | FINISH |
    +---------+-------------------------+-------------------------+
    |Evento_1| 2010-09-09 20:00:00 | 2010-09-09 22:30:00 |
    +---------+-------------------------+-------------------------+
    |Evento_2| 2010-09-10 22:00:00 | 2010-09-11 00:00:00 |
    +---------+-------------------------+-------------------------+
    |Evento_3| 2010-09-10 23:30:00 | 2010-09-11 06:00:00 |

    Come diavolo lo prendo Evento_1 e Evento_2?

    Grazie,
    saluti

  2. #2

    Re: [MYSQL] Problema con query su date

    Originariamente inviato da skunkio
    Salve,
    come da oggetto ho un piccolo problema con una query che dovrebbe restituirmi dei records rientranti in un determinato intervallo temporale.
    In pratica sto creando un piccolo di db di eventi per ogniuno dei quale è specificata una data di inizio e una di fine (ora compresa).
    Quello che voglio fare è:

    - prendermi gli eventi presenti, per una data specificata, che sono iniziati prima dell'ora passata in input e che finiscono nella stessa data o successivamente.

    - prendermi gli eventi presenti, per una data specificata, che iniziano dopo l'ora passata in input e che finiscono nella stessa data o successivamente.

    Supponiamo essere questa "2010-09-10 23:00:00" la data/ora passata in input e che nel mio db ho i seguenti records:

    +---------+-------------------------+-------------------------+
    | NAME | START | FINISH |
    +---------+-------------------------+-------------------------+
    |Evento_1| 2010-09-09 20:00:00 | 2010-09-09 22:30:00 |
    +---------+-------------------------+-------------------------+
    |Evento_2| 2010-09-10 22:00:00 | 2010-09-11 00:00:00 |
    +---------+-------------------------+-------------------------+
    |Evento_3| 2010-09-10 23:30:00 | 2010-09-11 06:00:00 |

    Come diavolo lo prendo Evento_1 e Evento_2?

    Grazie,
    saluti
    Il quesito non e' propriamente ben posto.

    Per FINISH in entrambi i casi vai da dataora dell'evento passato all'infinito, quindi e' sufficiente controllare che l'evento finisca DOPO la data di riferimento.

    In START vuoi prendere gli eventi sia prima che dopo la data di riferimento senza specificare quanto prima o quando dopo, quindi in pratica TUTTI.

    Bisogna modificare i termini del quesito che hai posto. Poi magari sono io che non capisco 'na cippa come recentemente mi e' stato detto in un thread.




    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3

    Re: Re: [MYSQL] Problema con query su date

    Originariamente inviato da piero.mac
    Il quesito non e' propriamente ben posto.

    Per FINISH in entrambi i casi vai da dataora dell'evento passato all'infinito, quindi e' sufficiente controllare che l'evento finisca DOPO la data di riferimento.

    In START vuoi prendere gli eventi sia prima che dopo la data di riferimento senza specificare quanto prima o quando dopo, quindi in pratica TUTTI.

    Bisogna modificare i termini del quesito che hai posto. Poi magari sono io che non capisco 'na cippa come recentemente mi e' stato detto in un thread.

    Ok, cerco di spiegarmi meglio, facciamo finta che la mia data di riferimento è adesso.
    Voglio prendere tutti gli eventi che sono in esecuzione in questo momento, quindi, quelli iniziati prima di ora e che non sono ancora finiti, oppure quelli che inizieranno dopo ma sempre nella giornata di oggi.
    Non voglio quelli di ieri, a meno che in questo momento non siano ancora in esecuzione e quelli che iniziano domani.
    La query da scrivere è questa, semlice semplice, nel caso in cui la data in input sia 2010-09-10 "23:10:00"

    SELECT NAME, START , FINISH
    FROM TABELLA
    WHERE FINISH >= "2010-09-10 23:10:00"
    AND START <= "2010-09-10 23:59:59"
    ORDER BY FINISH, NAME

    Va valutata anche la data di start <=, nel caso un evento inizia esattamente alle 23.59, della fine del giorno passato in ingresso altrimeto se valuto solo finish la query mi da, giustamente, anche quelli di domani che hanno finish sicuramente > della data in input.
    Avevo scritto una cosa complicatissima con 10.000 and e or quando apparentemente questa sembra fare al caso mio

    Grazie,
    saluti

  4. #4
    devi verificare che la data corrente sia tra start ed finish oppure (OR) la data di start sia minore della data di domani alle ore 00:00:00 ma anche uguale o maggiore della dataora corrente:

    traduciamo:

    codice:
    select *
    from tabella
    where
    (NOW() between START AND FINISH)
    OR
    (START between NOW() AND CURDATE() + interval 1 day)
    perche' curdate() + interval 1 day ... perche curdate() rende solo la data senza orario dove l'ora sottintesa e' 00:00:00 e quindi rende la data di domani alle ore 00:00:00

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.