2010-09-29 11 views
140

La seguente query:Come posso eseguire una query tra due date utilizzando MySQL?

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

restituisce nulla.

Dovrei avere più di dati sufficienti affinché la query funzioni. Che cosa sto facendo di sbagliato?

+14

Sii cauto con BETWEEN, poiché entrambi i valori 'min' e' max' sono considerati nell'intervallo, per non elaborare due volte una data che è il 'min' e valore 'max' (caso limite). Ad esempio, la data '2010-09-29 00: 00: 00' sarà _ tra '2010-09-28 00: 00: 00' e' 2010-09-29 00: 00: 00'_, ** AND ANCHE ** _ tra '2010-09-29 00: 00: 00' e' 2010-09-30 00: 00: 00'_ – minipif

+0

sì, quello che ha detto ^^ –

risposta

303

La seconda data è prima della prima data (per esempio, si sta eseguendo la query tra il 29 settembre 2010 e il 30 gennaio 2010.). Prova invertendo l'ordine delle date:

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

grazie. mi era mancata l 'intorno alle date. – xeo

+0

Lo sapevo ma ora ha un problema con UPDATE. Sto cercando di usare BETWEEN per UPDATE se funziona allo stesso modo? –

+1

@IngusGraholskis: una clausola 'where' dovrebbe funzionare allo stesso modo sulle istruzioni' select' o 'update'. – T30

10

È date_field di tipo datetime? Inoltre è necessario inserire prima la data del eariler.

dovrebbe essere:

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

Provare a cambiare le date in giro:

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

potrebbe essere un problema con la configurazione data in lato server o sul lato client. Ho trovato che questo è un problema comune su più database quando l'host è configurato in spagnolo, francese o qualsiasi altra cosa ... che potrebbe influenzare il formato gg/mm/aaaa o mm/gg/aaaa.

+2

Il problema era che la data precedente era elencata prima della data più recente. – theninjagreg

20

Vostri criteri deve avere data

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

provare

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

DATA() è una funzione di MySQL che estrae solo la parte data di una data o la data/espressione ora

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

tu * potresti * aggiungere una spiegazione così le persone capiranno cosa stai facendo. –

Problemi correlati