In een databasetabel heb ik een datumattribuut 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 dit formaat opgeslagen:

dd / mm / jjjj uu: mm: ss

Ik moet een SQL Query doen in PHP 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 te 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 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? Het opslaan van datums 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 zelfs 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 ' s 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 lokale instellingen.
  • @ypercube, Akkoord , 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 *