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
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, “di solito consiglio di memorizzare la data come una data, se possibile, e se è necessario utilizzare stringhe, Sarebbe meglio usare 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 cacciare: 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.
dates
piuttosto che come stringhe, cè qualche motivo per cui non puoi modificare la definizione della tabella ora? O stai anche chiedendo aiuto per farlo?