Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: uzycie like na polu typu timestamp
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
misty
hej, chce moc wyciagac z bazy dane wg daty. moge miec na wejsciu date z czasem, tj np '2010-08-31 10:00:02' lub tylko date, tj '2010-08-31'. pomyslalam ze moze wykorzystam do tego 'like'.
jednak jak probuje polaczyc 'like' z polem typu timestamp to nie wychodzi. Pisze takie polecenie:

  1. SELECT id FROM test WHERE date_start LIKE '2010-08-31%'
i otrzymuje komunikat:
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts

nie bardzo to rozumiem. czy ja moge zatem do timestamp uzyc 'like' tak jak chcialam? a moze macie jakis inny pomysl na moj problem?

pozdrawiam,
misty
wookieb
bo na timestamp-ie nie używa się like

Użyj between
phpion
Albo zrzutuj pole na stringa za pomocą CAST. Aczkolwiek BETWEEN będzie lepszym wyjściem (chociażby z racji możliwości użycia indeksu).
misty
ale ja bym chciala zeby to troszke inaczej dzialalo. bo w between musze podac zakres od - do. a ja chce miec tak:

- mam metode w javie ktore wykonuje to zapytanie. na wejsciu dostaje ona date. albo z czasem albo bez. czyli albo '2010-08-31' albo '2010-08-31 12:45:12'

chce miec takie zapytanie (tutaj czysty sql) zebym mogla podac i pierwszy wariant i drugi. w pierwszym-chce zeby mi znalezlo wszystkie rekordy ktore maja w sobie date '2010-08-31' (niewazne jaka godzina). a w drugim juz z konkretna godzina. jakbym miala mozliwosc uzycia czegos w stylu like, bo uniknelabym pisania warunkow:

select id from test where call_end like '2010-08-31%'
selet id from test where call_end like '2010-08-31 12:45:12'%'

czyli mialabym 1 zapytanie odporne na to, w jakim formacie podam date..
wookieb
Powtarzam. Na polu typu timestamp nie używa się LIKE i nawet o tym nie myśl. Przeparsuj datę po stronie php i ułóż odpowiednie zapytanie.
mortus
Wystarczy użyć funkcji DATE_FORMAT ponieważ zamienia ona datę (również w formacie TIMESTAMP) na łańcuch znaków, który jak najbardziej można porównywać za pomocą LIKE. Odpowiednie zapytanie:
  1. SELECT id FROM test WHERE DATE_FORMAT(call_end, '%Y-%m-%d %H:%i:%s') LIKE '2010-08-31%'


EDIT:
W sumie o tym samym pisał phpion, tylko użył funkcji CAST.
nospor
@mortus albo wychodzisz z założenia: "jak chce to niech ma, jej sprawa"
albo specjalnie z brutalną świadomością utwierdzasz ją w słuszności swoich złych pomysłów
smile.gif
cojack
DATE_FORMAT - nie ma takiej funkcji w postgresql.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.