2013-07-15 12 views
5

ProblemWybierz rekordy, w których datetime jest większa od określonej daty

Próbuję pobrać wszystkie rekordy z tabeli, gdzie DATE_TIME pole jest większa niż „czw, 11 lip 2013” uruchamiając poniżej wspomniana kwerenda. Wartość w polu date_time jest przechowywana w tym formacie => Thu, 11 Jul 2013 08:29:37. Każda pomoc będzie świetna.

Datatype z DATE_TIME pole jest varchar

Zapytanie

SELECT * FROM table_name 
WHERE username = '[email protected]' 
AND STR_TO_DATE(date_time, '%a, %e %b %Y %H:%i:%s') >= 'Thu, 11 Jul 2013 00:00:00'; 
+0

Proszę sprawdzić typ danych DATE_TIME. Czy to jest varchar czy data? –

+0

datatype to varchar – colourtheweb

+2

Konwertuj ciąg na datę, a nie na ciąg. – Barranka

Odpowiedz

5

Próbujesz porównać datę z łańcuchem.

Aplikacja funkcji str_to_date jest poprawna, ale nie porównuje się do daty.

Właściwy sposób, aby to zrobić jest:

select * from yourTable 
where STR_TO_DATE(date_time, '%a, %e %b %Y %H:%i:%s') >= '2013-07-11 00:00:00' 

Zauważ, że format daty jest YYYY-MM-DD HH: mm: ss (która jest domyślna data MySQL format).

Oczywiście, można również porównać do str_to_date wyników:

... where STR_TO_DATE(date_time, '%a, %e %b %Y %H:%i:%s') >= STR_TO_DATE('Thu, 11 Jul 2013 00:00:00', '%a, %e %b %Y %H:%i:%s') 
+0

Myślę, że masz dodatkowe "gdzie" w drugim zapytaniu? Jeśli nie, wyjaśnij składnię. –

+0

@ebyrob Dzięki ... tylko literówka – Barranka

6

Oto kolejny świetny przykład, dlaczego warto wdrożyć pola daty/czasu w MySQL za pomocą daty, datetime, lub Typy znaczników czasowych i pozwól aplikacji zajmować się formatowaniem daty dla danych wyjściowych.

Teraz będziesz musiał zrobić coś takiego:

SELECT * FROM table_name 
WHERE username = '[email protected]' 
AND STR_TO_DATE(date_time, '%a, %e %b %Y %H:%i:%s') >= STR_TO_DATE('Thu, 11 Jul 2013 00:00:00', '%a, %e %b %Y %H:%i:%s'); 

To zapytanie nie będzie mógł użyć dowolnego indeksu masz na polu date_time, więc zapytanie będzie bardzo nieefektywne. Musi wykonać pełne skanowanie tabeli, konwertując wartość każdego rzędu, aby dokonać porównania.

Co należy robić to:

SELECT * FROM table_name 
WHERE username = '[email protected]' 
AND date_time >= STR_TO_DATE('Thu, 11 Jul 2013 00:00:00', '%a, %e %b %Y %H:%i:%s'); 

Tutaj jeśli masz pole w formacie datetime MySQL, wystarczy przekonwertować wejście do tego formatu do dopasowania. Ponieważ dane pola są już w tym formacie, będziesz mógł użyć indeksu do wyszukiwania.

Powiązane problemy