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
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.
dates
in plaats van strings, is er een reden waarom u de tabeldefinitie nu niet kunt wijzigen? Of vraag je daarbij ook om hulp?