PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Wybieranie rekordów między dwoma znacznikami czasu

Co jest nie tak z:

SELECT a,b,c
FROM   table
WHERE  xtime BETWEEN '2012-04-01 23:55:00'::timestamp
                 AND now()::timestamp;

Jeśli chcesz operować z liczbą sekund jako interwał :

...
WHERE  xtime BETWEEN now()::timestamp - (interval '1s') * $selectedtimeParm
                 AND now()::timestamp;

Zwróć uwagę, jak użyłem standardowego formatu daty ISO 8601 RRRR-MM-DD h24:mi:ss co jest jednoznaczne dla dowolnej lokalizacji lub DateStyle ustawienie.

Zauważ również, że pierwsza wartość dla BETWEEN konstrukcja musi być mniejsza. Jeśli nie wiesz, która wartość jest mniejsza, użyj BETWEEN SYMMETRIC zamiast tego.

W swoim pytaniu odnosisz się do typu daty i godziny znacznik czasu jako „data”, „godzina” i „okres”. W tytule użyłeś terminu „ramki czasowe”, który zmieniłem na „znaczniki czasu”. Wszystkie te terminy są błędne. Swobodna ich zamiana sprawia, że ​​pytanie jest jeszcze trudniejsze do zrozumienia.

To i fakt, że otagowałeś tylko pytanie psql (problem prawie nie dotyczy terminala wiersza poleceń) może pomóc wyjaśnić, dlaczego nikt nie odpowiadał przez wiele dni. Zwykle to kwestia minut. Trudno mi było zrozumieć twoje pytanie, musiałem je przeczytać kilka razy.

Musisz zrozumieć typy danych data , przedział , czas i sygnatura czasowa - ze strefą czasową lub bez. Zacznij od przeczytania rozdziału "Typy dat/godzin" w podręczniku .

Komunikat o błędzie też przeszedłby długą drogę.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL now() i czas letni

  2. Wstaw XML z pliku w PostgreSQL

  3. PostgreSQL:Unikalne naruszenie:7 BŁĄD:zduplikowana wartość klucza narusza unikatowe ograniczenie users_pkey

  4. PG::ConnectionBad:fe_sendauth:brak hasła

  5. Zmiana tabeli za pomocą polecenia Sqitch Rework