Hvordan sammenlignes datoer i SQL?

I en databasetabel har jeg lavet en datoattribut, men jeg har indstillet dens type til varchar 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 foretage 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

  • Venligst rediger og tag dit spørgsmål for at fortælle os, hvilket databaseprodukt du bruger (f.eks. MySQL og version). Da det stort set altid er bedre at gemme datoer som 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?
  • Er du i stand til at ændre datoattributten til datetime? Opbevaring af datoer som varchar er problematisk. Du vil løbe ind i situationer, hvor der gemmes data, der ikke er en gyldig dato. Du konverterer også løbende til og fra datetime.

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" hvilket er almindeligt i mange kulturer. Se dette blogindlæg: Dårlige vaner at sparke: fejlhå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.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *