W tabeli bazy danych utworzyłem atrybut daty, ale ustawiłem jego typ na varchar
, a nie Date
. Moje pytanie brzmi: czy nadal będę mógł porównywać takie daty w zapytaniu SQL?
Daty w mojej bazie danych są przechowywane w następującym formacie:
dd / mm / rrrr gg: mm: ss
Muszę wykonać zapytanie SQL w PHP, które wygląda mniej więcej tak:
SELECT * FROM DBtable WHERE DBname="$name" AND date>="31/01/2015" AND date<="31/09/2015";
„date” wygląda tak: 07/08/2015 15:15:02
Byłbym wdzięczny za przykład aby to zrobić.
Komentarze
Odpowiedź
W zależności od używanej bazy danych, powinieneś być w stanie rzucić łańcuch na datę, a następnie przeprowadzić porównanie.
tj na serwerze Sql
cast(date as datetime) >= "20150131" ...
To powiedziawszy, zazwyczaj zalecam przechowywanie daty jako daty, jeśli to w ogóle możliwe, a jeśli musisz używać ciągów, Najlepiej byłoby użyć bardziej znormalizowanego formatu
tj "YYYY-mm-dd"
lub jeszcze lepiej "YYYYmmdd"
zamiast "mm/dd/YYYY"
, które na przykład można łatwo mieszać z "dd/mm/YYYY"
, który jest powszechny w wielu kulturach. Zobacz ten post na blogu: Złe nawyki: błędna obsługa zapytań dotyczących daty / zakresu
Komentarze
- i ' zwykle zaleca się używanie standardowego fromat dla dat, na przykład
'YYYY-mm-dd'
lub nawet lepszego'YYYYmmdd'
, a nie'mm/dd/YYYY'
, co jest niejednoznaczne, a jego interpretacja przez SQL-Server zależy od ustawień lokalnych. - @ypercube, Zgoda , zaktualizowany.
Odpowiedź
Pojawiło się pytanie „Z której bazy danych korzystasz?”
Każdy RDBMS ma swój własny sposób radzenia sobie z problemem.
Jeśli to MySQL, użyj str_to_date:
https://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_str-to-date
Spowoduje to konwersję varchar na datę i umożliwi poprawne sortowanie daty. Sortowanie daty jako typu varchar prowadzi do nieoczekiwanego zachowania.
dates
niż jako ciągi znaków, czy jest jakiś powód, dla którego nie można teraz zmienić definicji tabeli? Czy też prosisz o pomoc w tym?