Egy adatbázis táblában készítettem egy dátum attribútumot, de a típusát varchar
értékre állítottam, és nem Date
. A kérdésem az, hogy továbbra is képes leszek-e összehasonlítani az ilyen dátumokat egy SQL lekérdezésben?
A adatbázisom dátumai ebben a formátumban vannak tárolva:
nn / hh / éééé óóóóóóóóóóóóóóóáááááááááááááááááááááááááááááááááááááááááááááááááááááááá: nn h / éééééóóóóóóóóóóóóóóóóómm: hh: mm: ss
SQL-lekérdezést kell végrehajtanom a PHP-ben, ami így néz ki: p>
SELECT * FROM DBtable WHERE DBname="$name" AND date>="31/01/2015" AND date<="31/09/2015";
“date” így néz ki: 07/08/2015 15:15:02
Nagyra értékelném egy példát arra, hogyan erre.
Megjegyzések
Válasz
Attól függően, hogy milyen adatbázist használ, képesnek kell lennie a karakterlánc dátumra öntésére, majd az összehasonlításra.
azaz az Sql kiszolgálón
cast(date as datetime) >= "20150131" ...
Ennek ellenére általában azt ajánlom, hogy a dátumot tárolja dátumként, ha csak lehetséges, és ha mégis karakterláncokat kell használnia, A legjobb, ha szabványosabb formátumot használunk
azaz "YYYY-mm-dd"
vagy még jobb: "YYYYmmdd"
a "mm/dd/YYYY"
helyett, amelyek például könnyen összekeverhetők a "dd/mm/YYYY"
vel, amely sok kultúrában általános. Tekintse meg ezt a blogbejegyzést: Rossz szokások a rúgáshoz: helytelen dátum / tartomány lekérdezések kezelése
Megjegyzések
- és ez ' általában ajánlott szabványos fromat használatát a dátumokhoz, például
'YYYY-mm-dd'
vagy még jobb'YYYYmmdd'
és nem az'mm/dd/YYYY'
, amely nem egyértelmű, és az SQL-Server általi értelmezése a helyi beállításoktól függ. - @ypercube, Megállapodás , frissítve.
Válasz
Van egy kérdés: “Melyik adatbázist használja?”
Minden RDBMS-nek megvan a maga módja a probléma kezelésére.
Ha a MySQL használja az str_to_date dátumot:
https://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_str-to-date
Ez egy varchart dátummá konvertál, és lehetővé teszi a dátum helyes rendezését. A dátum varchar adattípusként való rendezése váratlan viselkedéshez vezet.
dates
formátumban tároljuk, van valami oka annak, hogy most nem módosíthatja a táblázat definícióját? Vagy ehhez is segítséget kér?