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

    [SQL] Differenze di ore/minuti nella clausola where

    Ciao a tutti, dovrei utilizzare una query per farmi restituire una lista delle prenotazioni effettuate "entro un'ora" dal loro inizio. Come potrei fare in sql?

    Mi spiego meglio;
    Avendo ogni prenotazione un'ora di inizio, vorrei poter fare modificare tale prenotazione massimo un'ora prima che inizi questa prenotazione. Il problema è che non ho trovato funzioni che posso usare o sono funzioni in cui serve un tipo date/datetime, mentre il mio campo "OraDiInizio" è un varchar.
    Ho provato cosi:

    codice:
    SELECT * FROM Prenotazione WHERE Data= '" +giornocorrente +"' AND str_to_date(`OraDiInizio`,'%h%i') <= '???? ' IN (SELECT * FROM Prenotazione WHERE Email= 'marco.rossi@gmail.com' ORDER BY str_to_date(`Data`, '%d-%m-%Y') DESC)
    per questo avevo usato il str_to_date, ma nonostante ciò non so come scrivere la condizione
    Dovrei quindi fare in modo che mi restituisca solo le prenotazioni, la cui data di inizio sia minore o uguale alla data di inizio meno un'ora (entro appunto un'ora dall'inizio).


    Funzioni come DATEDIFF O DATEADD, potrebbero servire?? Se si, come??
    Spero possiate aiutarmi, grazie in anticipo


    P.S: scusate se non sono riuscito a spiegarmi bene...

  2. #2
    P.S (2) : la seconda parte della query è per farmi restituire la lista delle prenotazioni di un determinato cliente, in questo coso l'utente con l'email marco.rossi@gmail.com; mentre il secondo str_to_date(Data , '%d-%m-%Y') è perché appunto la Data è del tipo "dd-mm-yyyy" mentre l'OraDiInizio è del tipo "hh:mm".

  3. #3
    1. di che db stiamo parlando?
    2. trasformare il campo OraDiInizio da varchar a datetime è un'opzione praticabile?

  4. #4
    E' un db mysql; per quanto riguarda il campo OraInizio, ho usato un varchar perché mi serviva il formato dd-mm-yyyy mentre il tipo Date usava un altro formato.
    Mi servirebbe poter confrontare l'ora corrente con l'ora massima in cui può modificare la prenotazione, cioè l'OraInizio - 1 ora, ma non ho trovato funzioni utili per effettuare questa differenza.
    DATEDIFF mi restituisce la differenza in giorni, mesi o altro, mentre mi serve che mi calcoli la differenza in ore:

    Ad esempio, se l'ora di inizio è 18:30, meno un'ora deve restituirmi le 17:30 (non 1 come differenza). Ma non so come farlo dato anche che il tipo non è date ma varchar....

  5. #5
    Quote Originariamente inviata da xXMarcoXx Visualizza il messaggio
    per quanto riguarda il campo OraInizio, ho usato un varchar perché mi serviva il formato dd-mm-yyyy mentre il tipo Date usava un altro formato.
    non confondere il tipo con il formato: il tipo lo definisci a livello db, il formato lo decidi a livello client

    cfr qui https://dev.mysql.com/doc/refman/8.0/en/datetime.html e qui https://www.w3schools.com/mysql/func...ate_format.asp (ma di esempi ne trovi a tonnellate)

Tag per questa discussione

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 © 2024 vBulletin Solutions, Inc. All rights reserved.