Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Postgresql] pobranie userów, którzy mają urodziny pomiędzy dwiema datami
Forum PHP.pl > Forum > Przedszkole
rasten
Witam, jak w temacie
mam duży problem z pobraniem użytkowników z kolumną 'data_ur', którzy mają urodziny między dwiema datami. Nawet nie wiem jak to ugyźć;/ Macie jakiś pomysł?
rasten
Cytat

dziękuję operatory znam, ale to mi nic nie daje.
Np:
data urodzienia: 1990-01-01
dwie daty: od 2010-05-10 do 2010-10-11 albo jeszcze gorsza sytuacja gdy lata się róznią, czyli np. 2009-07-10 do 2011-02-01.
Wie ktoś jak to rozwiązać?

EDIT// dlaczego ktoś mi to przeniósł do przedszkola? Skoro rozwiązanie jest takie proste i oczywiste to może jakieś wskazówki?

Sam sobie po długich bojach poradziłem, czy jest to wydajne, nie wiem ale działa
Z podziękowaniami dla moderatora, który przeniósł ten wątek do 'przedszkola'... (sarkazm ofkorz)
  1. WHERE
  2. (
  3. -- łączymy date urodzenia w format: rok_date_from-miesiac_urodzenia-dzien_urodzenia
  4. SELECT date_part('year', event.date_from) || '-' || to_char(rs2.birthdate, 'MM-DD')
  5. FROM reservations
  6. INNER JOIN reservations_users AS rs2 ON rs2.idreservations = reservations.idreservations
  7. INNER JOIN event ON event.idevent = reservations.idevent
  8. WHERE reservations.idevent = 27 AND rs2.idreservations_users = reservations_users.idreservations_users
  9. )::date BETWEEN event.date_from AND event.date_to
  10.  
  11. "
skowron-line
@rasten dobry as jesteś
w linku który Ci podałem to 1 przykład
Cytat
a BETWEEN x AND y
rasten
Ty też dobry as jesteś. Between znam, ale zauważ żeby go w końcu użyć musiałem wcześniej nieźle nakombinować: podzapytanie w WHERE, użycie funkcji date_part i to_char, konkatenacja (czy jak to się tam nazywa) wyników tych funkcji a potem jeszcze rzutowanie tego wszytkiego na typ 'date'. Niemniej dzięki za chęć pomocy.

Dla zainteresowanych objaśnienie: żeby sprawdzić czy ktoś ma urodziny między podanymi datami (date_from i date_to ), zamieniam rok w dacie urodzenia na ten, który jest w date_from.
  1. SELECT date_part('year', event.date_from) || '-' || to_char(rs2.birthdate, 'MM-DD')

rzutuje to na datę i dopiero wtedy używam BETWEEN.

Rozwiązanie mało eleganckie (tak mi się wydaje) także jak ktoś ma lepsze chętnię się zapoznam.
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-2025 Invision Power Services, Inc.