2013-07-16 15 views
6

Ho due colonne di una tabellacontrollo se una data è imminente o passata in MySQL

  • EVENT_DATE (valore viene 2013/09/22)
  • EVENT_TIME (il valore è 19:11)

ora voglio scrivere una query che dovrebbe rendimenti fila, che ha il tempo e la data in futuro o nel passato

ho scritto qualcosa di simile

select * from events e 
where concat(e.event_date,' ',e.event_time) <= date_format(now(),'%m/%d/%Y %g:%i %a') 

ma didnt' lavoro, è solo una di quelle cose che non si sa mai cosa c'è di sbagliato con loro

Grazie in anticipo!

+0

Hai memorizzato le date nel tuo database come testo ??? –

+0

Memorizza le date/orari utilizzando i tipi di dati DATETIME o TIMESTAMP. – Strawberry

risposta

1
select * from events e where TIMESTAMP(e.event_date,e.event_time) <= NOW() 
+0

CURTIME() restituisce 08:21:41 :) non puoi aspettarti di controllare una data con esso, vero? – imran

4
SELECT * 
    FROM Events 
WHERE event_date < CURRENT_DATE() 
    OR (  event_date = CURRENT_DATE() 
     AND event_time <= CURRENT_TIME() 
     ) 

Questo ha il vantaggio di utilizzare qualsiasi indice che potrebbe esistere event_date.

0

Una possibile soluzione, se i valori di event_date e event_time sono memorizzati come hai fatto vedere loro

Selezionare eventi passati

SELECT * 
    FROM events 
WHERE STR_TO_DATE(CONCAT(event_date, ' ', event_time), '%m/%d/%Y %h:%i %p') < NOW() 

Selezionare futuri eventi

SELECT * 
    FROM events 
WHERE STR_TO_DATE(CONCAT(event_date, ' ', event_time), '%m/%d/%Y %h:%i %p') > NOW() 

Ecco SQLFiddle demo

+0

@imran E 'stato d'aiuto? – peterm

Problemi correlati