Hvordan sammenligne datoer i SQL?

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

  • Vennligst rediger og tagg spørsmålet ditt for å fortelle oss hvilket databaseprodukt du bruker (f.eks. MySQL og versjon). Siden det stort sett alltid er bedre å lagre datoer som 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?
  • Er du i stand til å endre datoattributtet til datetime? Lagring av datoer som varchar er problematisk. Du vil komme i situasjoner der data lagres som ikke er en gyldig dato. Du konverterer også kontinuerlig til og fra datetime.

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.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *