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

  • Proszę edytować i otaguj swoje pytanie , aby poinformować nas, jakiego produktu bazy danych używasz (np. MySQL i wersja). Ponadto, skoro prawie zawsze lepiej jest przechowywać daty jako 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?
  • Czy możesz zmienić atrybut daty na datetime? Przechowywanie dat jako varchar jest problematyczne. Napotkasz sytuacje, w których przechowywane są dane, które nie są prawidłową datą. Będziesz także stale konwertować do iz daty i godziny.

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 nawet 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, takiego jak 'YYYY-mm-dd' lub nawet lepiej '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.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *