Come devo filtrare date in MySQL?

Sto creando una serie di “archivio” di pagine che vengono specificate per anno e per mese. Nella mia tabella ho un datetime campo chiamato posted. Voglio selezionare tutte le righe che si trovano in un particolare mese.

Ho pensato a due soluzioni:

(1) Utilizzare la stringa di corrispondenza:

SELECT ... WHERE posted LIKE '2009-06%'

(2) Utilizzare alcuni MySQL funzioni di aspirazione:

SELECT ... WHERE YEAR(posted)=2009 AND MONTH(posted)=6

Quale di questi sarà più veloce, e ci sono soluzioni migliori?

 

2 Replies
  1. 7
    SELECT   *
    WHERE    posted >= '2009-06-01'
             AND posted < '2009-07-01'

    Questo in modo efficace l’utilizzo di un indice posted, a differenza tua query.

    Nota che se il tuo era talmente semplice mantenere aggiornati i posted come VARCHAR, quindi la query seguente:

    SELECT ... WHERE posted LIKE '2009-06%'

    sarebbe utilizzare l’indice anche.

    • Non l’operatore TRA essere più appropriato qui?
    • Hmm, io non credo, come avete a che fare Calchi in MySQL con TRA date: dev.mysql.com/doc/refman/5.0/en/…
    • avrebbe restituito il record che rientrano nel ‘2009-07-01 00:00:00’ esattamente per entrambi giugno e luglio query. Può essere un problema.
    • Grazie, questo ha funzionato a meraviglia. Per qualche ragione che non si è verificato a me che potrei usare < > selettori…
  2. 1

    Trascurando le prenotazioni su questo disegno, la sintassi standard sarebbe “TRA prima data E l’ultimo-data”, o (se stai usando di meno che la data di granularità), “posted >= primo-data E pubblicato < ultima data + 1”.

Lascia un commento