Hogyan lehet összehasonlítani a dátumokat az SQL-ben?

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 p / hh / éééé óóóóóóóóóóó: 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ék egy példát arra, hogy erre.

Megjegyzések

  • Kérjük, szerkessze és címkézze meg kérdését , hogy megmondja, melyik adatbázis-terméket használja (pl. MySQL és verzió). Továbbá, mivel jóval mindig jobb, ha a dátumokat karakterláncok helyett 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?
  • Képes megváltoztatni a date attribútumot date time-ra? A dátumok varcharként történő tárolása problematikus. Olyan helyzetekbe ütközik, ahol olyan adatokat tárolnak, amelyek nem érvényesek. Folyamatosan fog konvertálni a dátumidőre és a dátumra.

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ás elvégzésére.

azaz az Sql kiszolgálóban

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

Ennek ellenére általában azt javasoljuk, 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 ' s általában azt javasolja, hogy a dátumokhoz használjon szokásos fromat-ot, például 'YYYY-mm-dd' vagy még jobb 'YYYYmmdd' és nem a 'mm/dd/YYYY', amely nem egyértelmű, és az SQL-Server általi értelmezése a helyi beállításoktól függ.
  • @ypercube, Egyetértett , frissítve.

Válasz

“Melyik adatbázist használod?”

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.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük