I en databastabell har jag gjort ett datumattribut, men jag har ställt in dess typ till varchar och inte Date. Min fråga är: kommer jag fortfarande att kunna jämföra sådana datum i en SQL-fråga?

Datum i min DB lagras i det här formatet:

dd / mm / åååå hh: mm: ss

Jag måste göra en SQL-fråga i PHP som ser ungefär så här ut:

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

”date” ser ut så här: 07/08/2015 15:15:02

Jag skulle uppskatta ett exempel på hur för att göra detta.

Kommentarer

  • Vänligen redigera och tagga din fråga för att berätta vilken databasprodukt du använder (t.ex. MySQL och version). Eftersom det är ganska mycket alltid bättre att lagra datum som dates snarare än strängar, finns det någon anledning att du inte kan ändra tabelldefinitionen nu? Eller ber du också om hjälp med att göra det?
  • Kan du ändra datumattributet till datetime? Att lagra datum som varchar är problematiskt. Du kommer att stöta på situationer där data lagras som inte är ett giltigt datum. Du kommer också att konvertera kontinuerligt till och från datetime.

Svar

Beroende på vilken databas du använder, du borde kunna kasta strängen till ett datum och sedan göra din jämförelse.

dvs. i SQL Server

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

Som sagt, jag rekommenderar vanligtvis att spara datumet som ett datum om det är möjligt, och om du behöver använda strängar, Det är bäst att använda ett mer standardiserat format

dvs. "YYYY-mm-dd" eller ännu bättre "YYYYmmdd" istället för "mm/dd/YYYY" som till exempel enkelt kan blandas upp med "dd/mm/YYYY" vilket är vanligt i många kulturer. Se detta blogginlägg: Dåliga vanor att sparka: fel hantering av datum / intervallfrågor

Kommentarer

  • och det ' rekommenderas vanligtvis att använda en standard fromat för datum, som 'YYYY-mm-dd' eller ännu bättre 'YYYYmmdd' och inte 'mm/dd/YYYY' som är tvetydig och dess tolkning av SQL Server beror på lokala inställningar.
  • @ypercube, överenskommet , uppdaterad.

Svar

Det finns en fråga om ”Vilken databas använder du?”

Varje RDBMS har sitt eget sätt att hantera problemet.

Om det är MySQL använd str_to_date:

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

Detta konverterar en varchar till ett datum och gör det möjligt att sortera datumet korrekt. Att sortera ett datum som en varchar-datatyp kommer att leda till oväntat beteende.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *