Hoe datums in SQL te vergelijken?

In een databasetabel heb ik een datumkenmerk gemaakt, maar ik heb het type ingesteld op varchar en niet Date. Mijn vraag is: kan ik dergelijke datums nog steeds vergelijken in een SQL-query?

Datums in mijn database worden in deze indeling opgeslagen:

dd / mm / jjjj uu: mm: ss

Ik moet een SQL Query in PHP doen die er ongeveer zo uitziet:

SELECT * FROM DBtable WHERE DBname="$name" AND date>="31/01/2015" AND date<="31/09/2015"; 

“date” ziet er als volgt uit: 07/08/2015 15:15:02

Ik zou een voorbeeld op prijs stellen van hoe om dit te doen.

Opmerkingen

  • Gelieve bewerken en tag uw vraag om ons te vertellen welk databaseproduct u gebruikt (bijv. MySQL en versie). Aangezien het vrijwel altijd beter is om datums op te slaan als dates in plaats van strings, is er dan een reden waarom u de tabeldefinitie nu niet kunt wijzigen? Of vraag je daarbij ook om hulp?
  • Kunt u het date-attribuut wijzigen in datetime? Datums opslaan als varchar is problematisch. U zult situaties tegenkomen waarin gegevens worden opgeslagen die geen geldige datum zijn. U zult ook continu converteren van en naar datetime.

Answer

Afhankelijk van welke database u gebruikt, je zou in staat moeten zijn om de string naar een datum te casten en dan je vergelijking te doen.

ie in Sql Server

cast(date as datetime) >= "20150131" ... 

Dat gezegd hebbende, zou ik “doorgaans aanraden om de datum als een datum op te slaan, indien mogelijk, en als je strings moet gebruiken, Het zou het beste zijn om een meer gestandaardiseerd formaat te gebruiken

dwz "YYYY-mm-dd" of nog beter "YYYYmmdd" in plaats van "mm/dd/YYYY" die bijvoorbeeld gemakkelijk kunnen worden gemengd omhoog met "dd/mm/YYYY" wat in veel culturen gebruikelijk is. Zie deze blogpost: Slechte gewoonten om te stoppen: verkeerde afhandeling van datum- / bereikquerys

Reacties

  • en het ' wordt meestal aanbevolen om een standaard fromat te gebruiken voor datums, zoals 'YYYY-mm-dd' of nog beter 'YYYYmmdd' en niet de 'mm/dd/YYYY' die dubbelzinnig is en de interpretatie ervan door SQL-Server afhankelijk is van de lokale instellingen.
  • @ypercube, overeengekomen , bijgewerkt.

Antwoord

Er is een vraag “Welke database gebruikt u?”

Elk RDBMS heeft zijn eigen manier om het probleem aan te pakken.

Als het MySQL is, gebruik dan str_to_date:

https://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_str-to-date

Dit converteert een varchar naar een datum en maakt het mogelijk om de datum correct te sorteren. Het sorteren van een datum als een varchar-datatype zal leiden tot onverwacht gedrag.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *