PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Selecionando registros entre dois timestamps


O que há de errado com:
SELECT a,b,c
FROM   table
WHERE  xtime BETWEEN '2012-04-01 23:55:00'::timestamp
                 AND now()::timestamp;

Se você deseja operar com uma contagem de segundos como intervalo :
...
WHERE  xtime BETWEEN now()::timestamp - (interval '1s') * $selectedtimeParm
                 AND now()::timestamp;

Observe como usei o formato de data padrão ISO 8601 YYYY-MM-DD h24:mi:ss que não é ambíguo com qualquer localidade ou DateStyle contexto.

Observe também que o primeiro valor para BETWEEN construção deve ser a menor. Se você não sabe qual valor é menor, use BETWEEN SYMMETRIC em vez de.

Na sua pergunta, você se refere ao tipo de data e hora timestamp como "data", "hora" e "período". No título você usou o termo "time frames", que eu mudei para "timestamps". Todos esses termos estão errados. Intercambiá-los livremente torna a questão ainda mais difícil de entender.

Isso e o fato de você ter marcado apenas a pergunta psql (o problema dificilmente diz respeito ao terminal de linha de comando) pode ajudar a explicar por que ninguém respondeu por dias. Normalmente, é uma questão de minutos por aqui. Tive dificuldade em entender sua pergunta, tive que ler algumas vezes.

Você precisa entender os tipos de dados date , intervalo , hora e timestamp - com ou sem fuso horário. Comece lendo o capítulo "Date/Time Types" no manual .

A mensagem de erro também teria percorrido um longo caminho.