Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie + data
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
Kyle
Witam.

Muszę wykonać zapytanie do bazy w który wyciągnę rekordy z odpowiednią datą.
W tym momencie mam coś takiego:

  1. SELECT
  2. SQ_AST.NAME,
  3. SQ_AST.TYPE_CODE,
  4. SQ_AST_ATTR_VAL.ATTRID,
  5. SQ_AST_ATTR_VAL.CUSTOM_VAL
  6. FROM SQ_AST
  7. LEFT JOIN SQ_AST_ATTR_VAL
  8. ON SQ_AST.ASSETID = SQ_AST_ATTR_VAL.ASSETID
  9. WHERE SQ_AST.TYPE_CODE = 'calendar_event_single' AND
  10. SQ_AST_ATTR_VAL.ATTRID = 1044 AND
  11. XYZ = 6
  12. ORDER BY SQ_AST.NAME ASC
  13. LIMIT 10;


I teraz problem mam taki, iż SQ_AST_ATTR_VAL.CUSTOM_VAL to tekst z datą, ale data może być w formacie "2010-02-22 20:00:00" lub jeśli nie podano godziny to wygląda to tak: "2010-03-22 --:--:--". Oczywiście chcę to wstawić w miejsce XYZ w zapytaniu smile.gif Dałem tam = 6, bo chcę wykonać zapytanie, które z tej daty wyciągnie mi dzień tygodnia, znalazłem coś w stylu:

  1. EXTRACT(DOW FROM TIMESTAMP 'timestamp') = 6


Mógłby mi ktoś podpowiedzieć jak to powinno wyglądać w tym miejscu?
Zbłąkany
Powinno działać poniższe zapytanie:
  1. SELECT
  2. SQ_AST.NAME,
  3. SQ_AST.TYPE_CODE,
  4. SQ_AST_ATTR_VAL.ATTRID,
  5. SQ_AST_ATTR_VAL.CUSTOM_VAL
  6. FROM
  7. SQ_AST LEFT JOIN
  8. SQ_AST_ATTR_VAL
  9. ON SQ_AST.ASSETID = SQ_AST_ATTR_VAL.ASSETID
  10. WHERE
  11. SQ_AST.TYPE_CODE = 'calendar_event_single' AND
  12. SQ_AST_ATTR_VAL.ATTRID = 1044 AND
  13. EXTRACT(DOW FROM TIMESTAMP SQ_AST_ATTR_VAL.CUSTOM_VAL) = 6
  14. ORDER BY SQ_AST.NAME ASC
  15. LIMIT 10;

Aczkolwiek nie wiem, czy dla tekstu to zadziała tongue.gif .
Gdyby nie zadziałało spróbuj przepuścić wartość argumentu przez funkcję CAST.
Poza tym powinieneś używać pola typu timestamp lub date oraz time (without timestamp).
Kyle
Tego to ja już dawno próbowałem winksmiley.jpg
Przeczytaj mój wcześniejszy post, to pole może wyglądać jak timestamp, ale może zamiast godziny mieć --:--:--
A po drugie, nie mogę nic zmienić w bazie, bo nie ja ją projektowałem, a cały team wielu ludzi przez ostatnie 10 lat winksmiley.jpg To baza jednego z większych CMS'ów klasy enterprise, więc... winksmiley.jpg
Zbłąkany
Więc moja konkluzja jest taka: że Ci co to robili to debile tongue.gif
Wyciągnij fragment string'a wyglądający, jak time without timestamp (używając substring from pattern), a potem skonwertuj do odpowiedniego formatu time. Wtedy takie coś wstaw do warunku na dzień tygodnia. Takie rozwiązanie ma jedną wadę: jest cholernie wolne ...
Ale skoro konwersja nie wchodzi w grę, to szkoda (bo myślałem, że dodanie dodatkowego pola date without timestamp do tabeli nie przeszkadza w innych zapytaniach tongue.gif
cojack
  1. EXTRACT(DOW FROM SQ_AST_ATTR_VAL.CUSTOM_VAL) = 6


To działa. A jak nie to zrzutuj typ:

  1. EXTRACT(DOW FROM SQ_AST_ATTR_VAL.CUSTOM_VAL::DATE ) = 6

mortus
Może tak:
  1. EXTRACT (DOW FROM TO_DATE(SQ_AST_ATTR_VAL.CUSTOM_VAL, 'YYYY-MM-DD')) = 6
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.