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

  • Upravte a označte svůj dotaz a sdělte nám, jaký databázový produkt používáte (např. MySQL a verze). Jelikož je vždy lepší ukládat data jako 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?
  • Dokážete změnit atribut data na datum a čas? Ukládání dat jako varchar je problematické. Dostanete se do situací, kdy jsou uložena data, která nejsou platným datem. Rovněž budete nepřetržitě převádět do a z datetime.

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í.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *