Tietokantataulukossa olen tehnyt päivämäärämääritteen, mutta olen asettanut sen tyypiksi varchar
eikä Date
. Kysymykseni kuuluu: voinko silti verrata tällaisia päivämääriä SQL-kyselyssä?
Tietokannani päivämäärät tallennetaan tässä muodossa:
pp / kk / vvvv hh: mm: ss
Minun on tehtävä PHP: ssä SQL-kysely, joka näyttää tältä:
SELECT * FROM DBtable WHERE DBname="$name" AND date>="31/01/2015" AND date<="31/09/2015";
”date” näyttää tältä: 07/08/2015 15:15:02
Arvostan esimerkkiä siitä, miten tehdäksesi tämän.
Kommentit
Vastaa
Käyttämästäsi tietokannasta riippuen sinun pitäisi pystyä heittämään merkkijono päivämäärään ja tekemään sitten vertailusi.
ts SQL-palvelimessa
cast(date as datetime) >= "20150131" ...
Siitä huolimatta suosittelen yleensä päivämäärän tallentamista päivämääränä, jos se on mahdollista, ja jos joudut käyttämään merkkijonoja, On parasta käyttää standardoitua muotoa
ts "YYYY-mm-dd"
tai jopa parempi "YYYYmmdd"
"mm/dd/YYYY"
-kohdan sijaan, joka esimerkiksi voidaan helposti sekoittaa "dd/mm/YYYY"
, joka on yleistä monissa kulttuureissa. Katso tämä blogiviesti: Väärät tavat potkia: väärä käsittely päivämäärä- / alue-kyselyillä
Kommentit
- ja se ' suositteli yleensä päivämäärille normaalia fromatia, kuten
'YYYY-mm-dd'
tai vielä parempaa'YYYYmmdd'
eikä'mm/dd/YYYY'
, joka on epäselvä, ja SQL-Serverin tulkinta riippuu paikallisista asetuksista. - @ypercube, Hyväksytty , päivitetty.
Vastaa
Kysymys ”Mitä tietokantaa käytät?”
Jokaisella RDBMS: llä on oma tapa käsitellä ongelmaa.
Jos MySQL käyttää str_to_date:
https://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_str-to-date
Tämä muuttaa varcharin päivämääräksi ja mahdollistaa päivämäärän lajittelun oikein. Päivämäärän lajitteleminen varchar-tietotyypiksi johtaa odottamattomaan toimintaan.
dates
kuin merkkijonoina, eikö jostain syystä voi muuttaa taulukon määritelmää nyt? Vai pyydätkö myös apua sen tekemiseen?