2013-07-16 10 views
6

Mam dwie kolumny w tabelisprawdzenie czy data jest Nadchodzące lub Past w MySQL

  • EVENT_DATE (wartość 22.09.2013)
  • event_time (wartość wynosi 19:11)

teraz chcę napisać kwerendę, która powinna powraca rząd, który ma czas i datę w przyszłości lub przeszłości

napisałem coś w tym

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

Ale nie zrobił”pracę, to po prostu jedna z tych rzeczy, które nigdy nie wiesz, co się dzieje z nimi

Dzięki z góry!

+0

Masz zapisane daty w bazie danych jako tekst ??? –

+0

Przechowuj daty/godziny, korzystając z typów danych DATETIME lub TIMESTAMP. – Strawberry

Odpowiedz

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

CURTIME() zwraca 08:21:41 :) nie możesz oczekiwać, że sprawdzisz datę, prawda? – imran

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

Ma to tę zaletę, że za pomocą dowolnego indeksu może istnieć na event_date.

0

Możliwym rozwiązaniem jeśli wartości event_date i event_time są przechowywane jak pokazał im

Wybierz minione wydarzenia

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

Wybierz przyszłych zdarzeń

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

Oto SQLFiddle wersja demonstracyjna

+0

@imran Czy to pomogło? – peterm

Powiązane problemy