AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 290299
Accepted
john doe
john doe
Asked: 2021-04-23 09:36:53 +0800 CST2021-04-23 09:36:53 +0800 CST 2021-04-23 09:36:53 +0800 CST

Como comparar a parte do tempo de datas para várias datas

  • 772

Eu tenho um banco de dados postgresql com vários registros que têm uma coluna de data que se parece com 2020-10-12 12:45:55. Estou querendo construir uma consulta que procure atividade com carimbos de data/hora em qualquer dia, mas entre 22:00:00 de um dia e 05:00:00 do dia seguinte na parte da hora real.

Como ignoro a data e me concentro apenas na parte da hora desta coluna? Acho que preciso dividir a coluna de data, mas ainda ser capaz de usar <e >operadores na string de tempo que resta.

postgresql date
  • 2 2 respostas
  • 879 Views

2 respostas

  • Voted
  1. Best Answer
    Erwin Brandstetter
    2021-04-23T23:44:25+08:002021-04-23T23:44:25+08:00

    que têm uma coluna de data que se parece com2020-10-12 12:45:55

    Isso não é uma coluna de data , mas um carimbo de data e hora (data e hora). Assumindo tipo timestamp, não timetamptz? (Você deve sempre divulgar as definições de tabela reais.)

    SELECT *
    FROM   tbl
    WHERE  timestamp_in_disguise::time >= '22:00'
    OR     timestamp_in_disguise::time <= '05:00';
    

    Ver:

    • Conversão de tipo de dados Postgres

    Ou:

    ...
    WHERE  timestamp_in_disguise::time NOT BETWEEN '05:00' AND '22:00';
    

    O primeiro inclui limites e você pode ajustar conforme necessário.

    O segundo usa BETWEEN, que sempre inclui limites - portanto, os exclui na expressão negada.
    Você ainda pode usar um hack para incluir limites construídos com base no conhecimento interno de que o Postgres armazena horários e carimbos de data e hora com resolução de microssegundos (6 dígitos decimais fracionários) em sua implementação atual.

    ...
    WHERE  timestamp_in_disguise::time NOT BETWEEN '05:00:00.000001' AND '21:59:59.999999';
    

    Mas eu aconselho fortemente contra o último. Construir em detalhes de implementação é frágil e feio.

    A conversão dos literais de string à direita é opcional, pois seu tipo é derivado da coluna digitada.

    Se estamos, de fato, lidando com timestamptzvocê, você precisa definir onde no mundo deve ser 22:00 etc. (Você pode precisar pensar sobre isso com timestamp, também.) Veja:

    • Ignorando completamente os fusos horários no Rails e no PostgreSQL

    Sobre BETWEENe incluindo os limites inferior e superior:

    • Como adicionar um indicador dia/noite a uma coluna de carimbo de data/hora?

    Se você executa muito esse tipo de consulta, considere um índice de expressão :

    CREATE INDEX ON tbl ((timestamp_in_disguise::time));  -- parentheses needed
    
    • 4
  2. Laurenz Albe
    2021-04-23T23:28:05+08:002021-04-23T23:28:05+08:00

    Você pode usar um elenco para time. Talvez isso faça:

    WHERE end_timestamp - start_timestamp < INTERVAL '1 day'
      AND CAST(start_timestamp AS time) > TIME '22:00:00'
      AND CAST(end_timestamp AS time) < TIME '05:00:00'
    

    Isso deve corresponder a tudo que começa depois das 22h e termina antes das 5h do dia seguinte.

    • 1

relate perguntas

  • Posso ativar o PITR depois que o banco de dados foi usado

  • Práticas recomendadas para executar a replicação atrasada do deslocamento de tempo

  • Os procedimentos armazenados impedem a injeção de SQL?

  • Sequências Biológicas do UniProt no PostgreSQL

  • Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve