mar
13
2010

MySQL: query di confronto date su campi varchar

closeQuesto articolo è stato pubblicato 1 anno 11 mesi 1 giorno giorni fa quindi alcuni contenuti o informazioni presenti in esso potrebbero non essere più validi. Questo sito non è responsabile per eventuali errori causati da questo problema.

Se per qualche ragione avete un database MySQL in cui ci sono dei campi data il cui formato non è “date” ma testo normale (ad es. “varchar”, “char”, ecc.) e volete comunque effettuare delle query di ricerca filtrando per data, potete combinare due funzioni di MySQL che fanno proprio al caso vostro.

Le funzioni sono:

  • DATE_FORMAT che formatta una data in una sintassi da voi stabilita;
  • STR_TO_DATE che converte una stringa in una data in formato MySQL (YYYY-mm-dd).

Vediamo un esempio:

supponiamo di avere un campo che si chiama “data_nascita” che è un varchar e contiene la data in formato dd/mm/YYYY, ecco come effettuare la query:

SELECT data_nascita,DATE_FORMAT(STR_TO_DATE(data_nascita,'%d/%m/%Y'),'%Y-%m-%d') FROM utenti

In questo modo otterremo due colonne, una con la data in formato originale e l’altra con la data in formato MySQL.

Se ad esempio vogliamo cercare tutte le persone nate prima del 2000 potremmo scrivere qualcosa del genere:

SELECT * FROM utenti
WHERE DATE_FORMAT(STR_TO_DATE(data_nascita,'%d/%m/%Y'),'%Y-%m-%d') < '2000-01-01'

In ogni caso ricordate che è buona norma avere i campi data in formato "date". Questo velocizzerà le query di ricerca. Se possibile convertite gli eventuali campi varchar in campi date.

Leave a comment

*