Użycie pola czasowego jako daty – bez informacji o godzinie

W bazie danych często rejestruje się czas wpisania danego rekordu – najprościej wykorzystać do tego funkcję bazy danych now(), a typami pól dla takich danych są przykładowo datetime w przypadku MySQL oraz timestamp without time zone dla PostgreSQL. Chcielibyśmy zrealizować prostego selecta, w którym czas będzie warunkiem, ale interesuje nas tylko data więc informacje o godzinie chcielibyśmy pominąć.

Można by oczywiście pójść na skróty i skorzystać w zapytaniu z daty typu „2012-09-01 00:00:00″ czy też pokombinować z wyrażeniami regularnymi, ale nie tędy droga, bo zakładam, że chcemy zrobić to w miarę elegancko :)

W przypadku Postgresa takie zapytanie jest niezwykle proste:

SELECT* FROM artykuly WHERE czasWpisania::date>='2012-09-01'

I tak dzięki przyjemnemu rzutowaniu realizowanym podwójnym dwukropkiem wartość z pola czasWpisania zostanie potraktowana jako data (tak na chłopski rozum).

Dla bazy MySQL taka składania nie zadziała i trzeba skorzystać z funkcji DATE_FORMAT() :

SELECT* FROM artykuly WHERE DATE_FORMAT(czasWpisania, '%Y-%m-%d')>='2012-09-01'

Jak widać zapis jest  „trudniejszy”, ale nie powinien dla nikogo stanowić problemu.

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)
Użycie pola czasowego jako daty - bez informacji o godzinie, 5.0 out of 5 based on 1 rating

Dodaj komentarz

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


5 − cztery =

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>