I en databasetabell har jeg laget et datoattributt, men jeg har satt typen til varchar
Date
. Spørsmålet mitt er: vil jeg fremdeles kunne sammenligne slike datoer i en SQL-spørring?
Datoer i DB-en min lagres i dette formatet:
dd / mm / åååå tt: mm: ss
Jeg må gjøre en SQL-spørring i PHP som ser omtrent slik ut:
SELECT * FROM DBtable WHERE DBname="$name" AND date>="31/01/2015" AND date<="31/09/2015";
«date» ser slik ut: 07/08/2015 15:15:02
Jeg vil sette pris på et eksempel på hvordan for å gjøre dette.
Kommentarer
Svar
Avhengig av hvilken database du bruker, du burde kunne kaste strengen til en dato og deretter gjøre sammenligningen.
dvs. i SQL Server
cast(date as datetime) >= "20150131" ...
Når det er sagt, vil jeg vanligvis anbefale å lagre datoen som en dato hvis det er mulig, og hvis du trenger å bruke strenger, Det er best å bruke et mer standardisert format
dvs. "YYYY-mm-dd"
eller enda bedre "YYYYmmdd"
i stedet for "mm/dd/YYYY"
som for eksempel enkelt kan blandes opp med "dd/mm/YYYY"
som er vanlig i mange kulturer. Se dette blogginnlegget: Dårlige vaner å sparke: feil behandling av dato / rekkevidde-spørsmål
Kommentarer
- og det ' anbefales vanligvis å bruke en standard fromat for datoer, som
'YYYY-mm-dd'
eller enda bedre'YYYYmmdd'
og ikke'mm/dd/YYYY'
som er tvetydig og dens tolkning av SQL-server avhenger av lokale innstillinger. - @ypercube, avtalt , oppdatert.
Svar
Det er et spørsmål om «Hvilken database bruker du?»
Hver RDBMS har sin egen måte å håndtere problemet på.
Hvis det er MySQL, bruk str_to_date:
https://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_str-to-date
Dette vil konvertere en varchar til en dato, og gjør det mulig å sortere datoen riktig. Sortering av en dato som en varchar-datatype vil føre til uventet oppførsel.
dates
i stedet for strenger, er det noen grunn til at du ikke kan endre tabelldefinisjonen nå? Eller ber du også om hjelp til å gjøre det?