2010-09-29 11 views
140

następujące zapytanie:Jak wykonać zapytanie między dwiema datami za pomocą MySQL?

SELECT * FROM `objects` 
WHERE (date_field BETWEEN '2010-09-29 10:15:55' AND '2010-01-30 14:15:55') 

powraca niczym.

Powinienem mieć wystarczająco dużo danych, aby zapytanie zadziałało. Co ja robię źle?

+14

Należy zachować ostrożność w funkcji BETWEEN, ponieważ zarówno wartości 'min' i' max' są uważane za znajdujące się w zakresie, aby nie przetwarzać dwukrotnie daty o wartości 'min' oraz wartość 'max' (przypadek krawędzi). Na przykład data "2010-09-29 00: 00: 00" będzie między "2010-09-28 00: 00: 00" i "2010-09-29 00: 00: 00", ** ORAZ TAKŻE ** _ _ pomiędzy "2010-09-29 00: 00: 00' i" 2010-09-30 00: 00: 00'_ – minipif

+0

tak, co on powiedział ^^ –

Odpowiedz

303

Twoja druga data jest przed pierwszym terminie (tj jesteś zapytań pomiędzy 29 września 2010 a 30 stycznia 2010 r.). Spróbuj odwrócić kolejność dat:

SELECT * 
FROM `objects` 
WHERE (date_field BETWEEN '2010-01-30 14:15:55' AND '2010-09-29 10:15:55') 
+1

dzięki. przegapiłem "w okolicach dat. – xeo

+0

Znam to, ale teraz ma problem z AKTUALIZACJĄ. Próbuję użyć BETWEEN do aktualizacji, czy działa to w ten sam sposób? –

+1

@IngusGraholskis: klauzula 'where' powinna działać tak samo na instrukcjach' select' lub 'update'. – T30

10

Czy date_field typu datetime? Musisz także najpierw wpisać datę pierwszego przyjaciela.

Powinno być:

SELECT * FROM `objects` 
WHERE (date_field BETWEEN '2010-01-30 14:15:55' AND '2010-09-29 10:15:55') 
0

spróbuj przełączyć daty wokół:

2010-09-29 > 2010-01-30? 
1

może być problem z konfiguracją data na stronie serwera lub po stronie klienta. Stwierdziłem, że jest to powszechny problem w wielu bazach danych, gdy host jest skonfigurowany w języku hiszpańskim, francuskim lub cokolwiek innego, co może mieć wpływ na format dd/mm/rrrr lub mm/dd/rrrr.

+2

Problem polegał na tym, że starsza data została wymieniona przed nowszą datą. – theninjagreg

20

Zapytanie powinien mieć datę jako

select * from table between `lowerdate` and `upperdate` 

spróbować

SELECT * FROM `objects` 
WHERE (date_field BETWEEN '2010-01-30 14:15:55' AND '2010-09-29 10:15:55') 
3

data() jest funkcją MySQL, który wydobywa tylko data część daty lub daty/wyrażenia czasu

SELECT * FROM table_name WHERE DATE(date_field) BETWEEN '2016-12-01' AND '2016-12-10'; 
+0

* możesz * dodać wyjaśnienie, aby ludzie zrozumieli, co robisz. –

Powiązane problemy