I en databasetabel har jeg lavet en attribut for dato, men jeg har indstillet dens type til varchar
og ikke Date
. Mit spørgsmål er: vil jeg stadig kunne sammenligne sådanne datoer i en SQL-forespørgsel?
Datoer i min DB er gemt i dette format:
dd / mm / åååå tt: mm: ss
Jeg skal lave en SQL-forespørgsel i PHP, der ser sådan ud:
SELECT * FROM DBtable WHERE DBname="$name" AND date>="31/01/2015" AND date<="31/09/2015";
“date” ser sådan ud: 07/08/2015 15:15:02
Jeg ville sætte pris på et eksempel på, hvordan for at gøre dette.
Kommentarer
Svar
Afhængigt af hvilken database du bruger, du skal være i stand til at caste strengen til en dato og derefter foretage din sammenligning.
dvs. i SQL Server
cast(date as datetime) >= "20150131" ...
Når det er sagt, vil jeg typisk anbefale at gemme datoen som en dato, hvis det overhovedet er muligt, og hvis du har brug for strenge, Det er bedst at bruge et mere standardiseret format
dvs. "YYYY-mm-dd"
eller endnu bedre "YYYYmmdd"
i stedet for "mm/dd/YYYY"
som f.eks. let kan blandes op med "dd/mm/YYYY"
som er almindelig i mange kulturer. Se dette blogindlæg: Dårlige vaner at sparke: forkert håndtering af dato- / rækkeforespørgsler
Kommentarer
- og det ' anbefales normalt at bruge en standard fromat til datoer, som
'YYYY-mm-dd'
eller endnu bedre'YYYYmmdd'
og ikke'mm/dd/YYYY'
som er tvetydig og dens fortolkning af SQL Server afhænger af lokale indstillinger. - @ypercube, Aftalt , opdateret.
Svar
Der er et spørgsmål om “Hvilken database bruger du?”
Hver RDBMS har sin egen måde at håndtere problemet på.
Hvis det er MySQL, skal du bruge str_to_date:
https://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_str-to-date
Dette konverterer en varchar til en dato og gør det muligt at sortere datoen korrekt. Sortering af en dato som en varchar-datatype vil føre til en uventet opførsel.
dates
i stedet for strenge, er der en eller anden grund til, at du ikke kan ændre tabeldefinitionen nu? Eller beder du også om hjælp til at gøre det?