2012-12-03 21 views
6

Ho questa query, ho bisogno di selezionare tutti i record tra due date, la tabella mysql è un formato datetime.Seleziona tutti i record tra due formati datetime

Ho provato questo ma non ha funzionato.

select * from cdr 
WHERE calldate BETWEEN '2012-12-01' AND '2012-12-03'; 
+0

"ma non ha funzionato." Può essere più preciso? Qual è stato il messaggio di errore o il risultato indesiderato? –

risposta

11

Prova a modificare:

select * from cdr 
WHERE DATE(calldate) BETWEEN '20121201' AND '20121203'; 
+0

Grazie mille :) Ancora! –

+1

Attenzione, questo ucciderà le tue prestazioni su grandi tavoli, poiché l'indice non funzionerà più. –

+0

Questa risposta ignora gli indici ed è una cattiva pratica. Si dovrebbe considerare di utilizzare il valore del campo così com'è e convertire le date utilizzando un formato. Dovresti invece usare la risposta di @Rohit Suthar. –

-1

È possibile che funzionano molto bene. Se si vuole aggiungere condizioni di troppo, normale logica booleana funziona con data/ora e in modo che si possa fare qualcosa di simile

... 
where DATE(calldate) < '20121201' AND DATE(calldate) >= '20121203' OR DATE(calldate) = '20121205' 

Basta un semplice esempio.

1

Prova questa ricerca -

SELECT * FROM cdr WHERE calldate BETWEEN str_to_date('2012-12-01','%Y-%m-%d') AND str_to_date('2012-12-03','%Y-%m-%d'); 
+0

Questo in effetti funziona ed è una buona pratica poiché converte le date utilizzando il formato specificato e utilizza gli indici. –

+1

se volevo aggiungere anche un timestamp come avrei fatto. 'str_to_date ('2017-10-20 14:00:00', '% Y-% m-% d% H:% i:% s')' – virtualLast

Problemi correlati