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

Wybierz tylko dzisiejsze (od północy) znaczniki czasu

Zainspirowany komentarzem @Frank przeprowadziłem kilka testów i odpowiednio dostosowałem zapytanie. Powinno to być 1) poprawne i 2) tak szybko, jak to możliwe:

SELECT u.login, u.id, u.first_name
FROM   pref_users u
WHERE  u.login > u.logout
AND    u.login >= now()::date + interval '1h'
ORDER  BY u.login;

Ponieważ w Twojej tabeli nie ma przyszłych znaczników czasu (zakładam), nie potrzebujesz górnej granicy.
date_trunc('day', now()) jest prawie taki sam jak now()::date (lub inne alternatywy wyszczególnione poniżej), tylko że zwraca timestamp zamiast date . Oba dają timestamp mimo wszystko po dodaniu interval .

Poniższe wyrażenia działają nieco inaczej. Dają nieco inne wyniki, ponieważ localtimestamp zwraca typ danych timestamp podczas gdy now() zwraca timestamp with time zone . Ale kiedy rzuca się na date , albo jest konwertowany na ten sam lokalny data i timestamp [without time zone] zakłada się, że również znajduje się w lokalnej strefie czasowej. Więc w porównaniu z odpowiednim timestamp with time zone wszystkie dają wewnętrznie ten sam znacznik czasu UTC. Więcej szczegółów na temat obsługi stref czasowych w tym powiązanym pytaniu.

Najlepsza z pięciu. Testowane z PostgreSQL 9.0. Powtórzone z 9.1.5:spójne wyniki w granicach 1% marginesu błędu.

SELECT localtimestamp::date     + interval '1h'  -- Total runtime: 351.688 ms
     , current_date             + interval '1h'  -- Total runtime: 338.975 ms
     , date_trunc('day', now()) + interval '1h'  -- Total runtime: 333.032 ms
     , now()::date              + interval '1h'  -- Total runtime: 278.269 ms
FROM   generate_series (1, 100000)

now()::date jest oczywiście nieco szybszy niż CURRENT_DATE .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Moje ulubione zapytania PostgreSQL i ich znaczenie

  2. Tworzenie zimnej gotowości dla PostgreSQL przy użyciu Amazon AWS

  3. postgresql - zamień wszystkie wystąpienia ciągu w polu tekstowym

  4. Wyświetlaj tabele w schemacie PostgreSQL

  5. Porównanie wydajności i cen PostgreSQL DigitalOcean — ScaleGrid i zarządzane bazy danych DigitalOcean