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 / 2758
Accepted
Jonas
Jonas
Asked: 2011-05-18 01:16:03 +0800 CST2011-05-18 01:16:03 +0800 CST 2011-05-18 01:16:03 +0800 CST

Como obter a coluna timestamp em apenas milissegundos do PostgreSQL?

  • 772

Tenho uma coluna "criada" com tipo timestamp without time zone default now()em um banco de dados PostgreSQL.

Se eu selecionar colums, ele terá um formato agradável e legível por padrão:

SELECT created FROM mytable;

         created
---------------------------
2011-05-17 10:40:28.876944

Mas eu gostaria de obter o timestamp em apenas milissegundos (como um Long). Algo assim:

SELECT meuformato(criado) FROM minhatabela;

     created
-----------------
2432432343876944

Como posso obter a coluna timestamp em apenas milissegundos do PostgreSQL?


Resposta a Jaque:

Eu recebo a mesma diferença que você (-3600), mas se eu usar timestamp with time zoneposso ver que o "erro" ou diferença é porque '1970-01-01' obtém fuso horário +01.

create table my_table_2(created timestamp with time zone);
CREATE TABLE
insert into my_table_2 (created) values (now()), ('1970-01-01');
INSERT 0 2
select created, extract(epoch from created) from my_table_2;
            created            |    date_part
-------------------------------+------------------
 2011-05-18 11:03:16.909338+02 | 1305709396.90934
 1970-01-01 00:00:00+01        |            -3600
(2 rows)

A diferença é um bug? Eu posso ser por causa do "horário de verão" no momento?


Também interessante ao usar to_timestamp()para inserir timestamp 0 e 1.

insert into my_table_2 (created) values (to_timestamp(0));
INSERT 0 1

insert into my_table_2 (created) values (to_timestamp(1));
INSERT 0 1
select created, extract(epoch from created) from my_table_2;
            created            |    date_part
-------------------------------+------------------
 2011-05-18 11:03:16.909338+02 | 1305709396.90934
 1970-01-01 00:00:00+01        |            -3600
 1970-01-01 01:00:00+01        |                0
 1970-01-01 01:00:01+01        |                1
postgresql timestamp
  • 3 3 respostas
  • 163118 Views

3 respostas

  • Voted
  1. Best Answer
    DrColossos
    2011-05-18T02:06:09+08:002011-05-18T02:06:09+08:00

    Use EXTRACTe o UNIX-Timestamp

    SELECT EXTRACT(EPOCH FROM TIMESTAMP '2011-05-17 10:40:28.876944') * 1000;
    

    daria

    1305621628876.94

    Multiplique por 1000para transformá-lo em milissegundos. Você pode então convertê-lo para o que quiser ( decimal seria uma boa escolha). Não se esqueça de manter o fuso horário em mente. JackPDouglas tem um exemplo em sua resposta . Aqui está um trecho de sua resposta ( createdsendo a coluna com seu timestamp) que ilustra como trabalhar com fusos horários:

    SELECT EXTRACT(EPOCH FROM created AT TIME ZONE 'UTC') FROM my_table;
    
    • 65
  2. Jack Douglas
    2011-05-18T04:22:33+08:002011-05-18T04:22:33+08:00

    --EDITAR--

    Eu descobri que isso (veja abaixo) é basicamente errado. Veja Como obtenho o timestamp unix atual do PostgreSQL? para a fonte da minha confusão...

    --FIM DA EDIÇÃO--

    Postando como resposta porque não funcionará como comentário.

    banco de teste:

    create role stack;
    grant stack to dba;
    create schema authorization stack;
    set role stack;
    
    create table my_table(created timestamp);
    insert into my_table(created) values(now()),('1970-01-01');
    \d my_table
                  Table "stack.my_table"
     Column  |            Type             | Modifiers
    ---------+-----------------------------+-----------
     created | timestamp without time zone |
    

    consultas:

    select created, extract(epoch from created) from my_table;
    
              created          |    date_part
    ---------------------------+------------------
     2011-05-17 13:18:48.03266 | 1305634728.03266
     1970-01-01 00:00:00       |            -3600
    
    
    select created, extract(epoch from date_trunc('milliseconds', created)) 
    from my_table;
    
              created          |    date_part
    ---------------------------+------------------
     2011-05-17 13:18:48.03266 | 1305634728.03266
     1970-01-01 00:00:00       |            -3600
    
    
    select created, extract(epoch from created at time zone 'UTC') from my_table;
    
              created          |    date_part
    ---------------------------+------------------
     2011-05-17 13:18:48.03266 | 1305638328.03266
     1970-01-01 00:00:00       |                0
    

    nota date_partna terceira consulta é: 130563 83 28.03266 - 3600 diferente.

    • 7
  3. vmods
    2020-05-21T08:27:56+08:002020-05-21T08:27:56+08:00

    Eu sei que este é um post antigo, mas vendo que eu tinha a mesma pergunta agora e estava referenciando coisas como este post, talvez minha resposta possa ser valiosa para outras pessoas:

    Anexe isso à coluna com o timestamp que você está consultando com isto: ::timestamptz(3)

    Isso filtrará a precisão para apenas recuperar/corresponder milissegundos -->

    Então, por exemplo, minha solução SQL em JS, agora funcionando, se parece com isso:

    `SELECT * FROM public.reports WHERE id::timestamptz(3) = '${dateRequested}';`
    
    • 2

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

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

    • 4 respostas
  • Marko Smith

    Como você mostra o SQL em execução em um banco de dados Oracle?

    • 2 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

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

    • 10 respostas
  • Marko Smith

    Posso ver Consultas Históricas executadas em um banco de dados SQL Server?

    • 6 respostas
  • Marko Smith

    Como uso currval() no PostgreSQL para obter o último id inserido?

    • 10 respostas
  • Marko Smith

    Como executar o psql no Mac OS X?

    • 11 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
  • Marko Smith

    Passando parâmetros de array para um procedimento armazenado

    • 12 respostas
  • Martin Hope
    Manuel Leduc Restrição exclusiva de várias colunas do PostgreSQL e valores NULL 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler Quando uma chave primária deve ser declarada sem cluster? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +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
  • Martin Hope
    BrunoLM Guid vs INT - Qual é melhor como chave primária? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick Como posso otimizar um mysqldump de um banco de dados grande? 2011-01-04 13:13:48 +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