Come confrontare le date in SQL?

In una tabella di database ho creato un attributo di data, ma ho impostato il suo tipo su varchar e non Date. La mia domanda è: sarò ancora in grado di confrontare tali date in una query SQL?

Le date nel mio database sono memorizzate in questo formato:

dd / mm / yyyy hh: mm: ss

Devo eseguire una query SQL in PHP che assomigli a questa:

SELECT * FROM DBtable WHERE DBname="$name" AND date>="31/01/2015" AND date<="31/09/2015"; 

“date” ha questo aspetto: 07/08/2015 15:15:02

Gradirei un esempio di come per farlo.

Commenti

  • modifica e tagga la tua domanda per indicarci quale prodotto di database stai utilizzando (ad es. MySQL e versione). Inoltre, poiché è praticamente sempre meglio memorizzare le date come dates piuttosto che come stringhe, cè qualche motivo per cui non puoi cambiare la definizione della tabella ora? O stai anche chiedendo aiuto per farlo?
  • Sei in grado di cambiare lattributo della data in datetime? La memorizzazione delle date come varchar è problematica. Ti imbatterai in situazioni in cui vengono memorizzati dati che non sono una data valida. Potrai anche convertire continuamente da e verso datetime.

Risposta

A seconda del database che stai utilizzando, dovresti essere in grado di eseguire il cast della stringa su una data e quindi fare il confronto.

ie in Sql Server

cast(date as datetime) >= "20150131" ... 

Detto questo, “in genere consiglio di memorizzare la data come una data, se possibile, e se è necessario utilizzare stringhe, Sarebbe meglio utilizzare un formato più standardizzato

es "YYYY-mm-dd" o anche meglio "YYYYmmdd" invece di "mm/dd/YYYY" che, ad esempio, può essere facilmente miscelato con "dd/mm/YYYY", comune in molte culture. Vedi questo post del blog: Cattive abitudini da eliminare: gestione errata delle query su date / intervalli

Commenti

  • e ' di solito consiglia di utilizzare uno standard fromat per le date, come 'YYYY-mm-dd' o anche meglio 'YYYYmmdd' e non 'mm/dd/YYYY' che è ambiguo e la sua interpretazione da parte di SQL Server dipende dalle impostazioni locali.
  • @ypercube, daccordo , aggiornato.

Risposta

Cè “una domanda di” Quale database stai usando? “

Ogni RDBMS ha il proprio modo di gestire il problema.

Se è MySQL, usa str_to_date:

https://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_str-to-date

Questo convertirà un varchar in una data e renderà possibile ordinare la data correttamente. Ordinare una data come un tipo di dati varchar porterà a un comportamento imprevisto.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *