V databázové tabulce jsem vytvořil atribut data, ale nastavil jsem jeho typ na varchar
a ne Date
. Moje otázka zní: budu stále schopen porovnávat taková data v dotazu SQL?
Data v mé databázi jsou uložena v tomto formátu:
dd / mm / rrrr hh: mm: ss
Musím v PHP udělat dotaz SQL, který vypadá asi takto:
SELECT * FROM DBtable WHERE DBname="$name" AND date>="31/01/2015" AND date<="31/09/2015";
„date“ vypadá takto: 07/08/2015 15:15:02
ocenil bych příklad, jak k tomu.
Komentáře
Odpovědět
Podle toho, jakou databázi používáte, měli byste být schopni vložit řetězec do data a poté provést srovnání.
tj na serveru Sql
cast(date as datetime) >= "20150131" ...
To znamená, že obvykle doporučuji uložit datum jako datum, pokud je to vůbec možné, a pokud potřebujete použít řetězce, Nejlepší by bylo použít standardizovanější formát.
tj "YYYY-mm-dd"
nebo ještě lepší "YYYYmmdd"
místo "mm/dd/YYYY"
, které lze například snadno míchat až s "dd/mm/YYYY"
což je běžné v mnoha kulturách. Podívejte se na tento blogový příspěvek: Špatné návyky, které je třeba nakopnout: nesprávné zpracování dotazů na datum / rozsah
Komentáře
- a ' s se obvykle doporučuje použít pro data standardní fromat, například
'YYYY-mm-dd'
nebo ještě lepší'YYYYmmdd'
a nikoli'mm/dd/YYYY'
, který je nejednoznačný a jeho interpretace pomocí serveru SQL závisí na místním nastavení. - @ypercube, souhlasím , aktualizováno.
Odpověď
Existuje otázka „Jakou databázi používáte?“
Každý RDBMS má svůj vlastní způsob řešení problému.
Pokud je to MySQL, použijte str_to_date:
https://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_str-to-date
Tím se varchar převede na datum a umožní se správně seřadit datum. Řazení data jako datového typu varchar povede k neočekávanému chování.
dates
než jako řetězce, existuje nějaký důvod, proč nyní nemůžete definici tabulky změnit? Nebo při tom také žádáte o pomoc?