PostGresql para_char timestamp com fuso horário

PostGresql para_char timestamp com fuso horário

Os métodos de formatação do PostGresql incluem uma coleção útil de ferramentas para traduzir diferentes tipos de dados (data/hora, número inteiro, ponto flutuante, numérico) para formatar strings e traduzir seqüências de caracteres formatadas em tipos de dados exclusivos. Daí em diante, às vezes precisamos converter fusos horários também. O tempo é sempre gravado no UTC nos registros de data e hora do PostgreSQL para o Formulário de Dados do Fuso Tempo, mas é exibido por padrão no navegador, sessão ou horário local do usuário. Uma de suas funções auxiliares em que confiamos é o método to_char (), que permite o registro de data e hora e o registro de data e hora com o fuso horário, entre outras formas, e permite que você organize as peças de um registro de data e hora, como quiser. Um registro de data e hora, uma precisão dupla, a duração, um número ou um valor numérico podem ser convertidos em uma string usando o método PostGresql to_char (). Parece haver um método de argumento único, 'to_timestamp', que leva um argumento de precisão dupla e se transforma da época do UNIX em Timestamp usando o fuso horário. Vamos mostrar como fazer algo sobre isso neste post. Vamos dar uma olhada mais de perto para_char () primeiro.

Sintaxe:

A sintaxe geral para a função to_char () é a seguinte:

>> to_char (expressão, formato);

O método to_char () no PostgreSQL precisa de duas afirmações:

  • Expressão: Um registro de data e hora, uma duração, um número, uma precisão dupla ou um valor numérico que é traduzido para uma string conforme um formato específico pode ser usado como expressões.
  • Formatar: O estilo em que a sequência de saída será mostrada. O formato pode ser diferente de acordo com o tipo de expressão, e.g., número, data.

Existem dois tipos de registro de data e hora disponíveis no PostgreSQL:

  • Timestamp: sem fuso horário.
  • Timestamptz: com fuso horário.

E aqui está a questão: o formulário de dados de registro de data e hora padrão ignora os fusos horários. E é uma necessidade SQL (como poderia ter ocorrido parece além). Nosso foco principal é aprender To_Char () Timestamp com um fuso horário. Para começar a trabalhar no PostGresql com a função 'to_char ()', abra o shell da linha de comando postgreSQL e entregue os valores dos parâmetros para o servidor obrigatório, o banco de dados, o número da porta, o nome de usuário e a senha. Deixe essas considerações não preenchidas se precisar consumir os parâmetros designados padrão, como mostrado na imagem abaixo.

To_char () para o número da string

Para entender o conceito da função to_char () usando o timestamp com o Fuzão Time. Então, temos um número '1897' e o converteremos para o '9999.99 'formato usando a consulta abaixo. A partir da saída abaixo, você pode ver que o número da string foi convertido no formato especificado.

>> Selecione TO_CHAR (1897, '9999.99 ');

Aqui está outra ilustração para conversão. Desta vez, convertemos um número em um formato diferente com 'vírgula'. O personagem 'g' será usado para especificar uma vírgula.

>> Selecione To_Char (367.78, '9G999.99 ');

To_Char Timestamp com fuso horário

Para entender o registro de data e hora com o conceito de fuso horário, vamos considerar um exemplo simples. Suponha que você esteja em 'Paquistão', então seu fuso horário deve ser 'pkt' agora.

Exemplo 01:

Vamos tentar buscar o registro de data e hora atual na consulta Select enquanto o converte até o formato de data de data, conforme mostrado na consulta abaixo. O termo 'TZ' é usado para devolver o fuso horário atual. A saída exibe o dia, data, hora e fuso horário.

>> Selecione TO_CHAR (Current_timestamp, 'Dia Mon DD, AAA AA AA AA AA AAÇÃO HH12: MI AM (TZ)');

Vamos mudar nosso fuso horário para 'Europa/Roma'.

>> definir o tempo horário = 'Europa/Roma';

Você terá um tempo, data e fuso horário diferente ao tentar a mesma consulta selecionada, como mostrado.

Exemplo 02:

Quando você especifica o fuso horário na consulta selecionada, a saída não mostra o fuso horário atual conforme a saída abaixo.

>> Selecione TO_CHAR (current_timestamp at Hora 'Asia/Jerusalem', 'AAA HH12: MI AM (TZ)');

Exemplo 03:

Vamos criar uma tabela rápida chamada 'time' com dois campos. Um é do tipo de timestamp, e o outro é o tipo timestamptz.

>> Crie horário da tabela (sem_TimeZone Timestamp, with_timeZone timeSTamptz);

Agora vamos verificar o fuso horário atual que usamos em nosso sistema usando o comando show no shell da seguinte maneira:

>> mostrar fuso horário;

Agora você deve inserir os valores atuais da data e hora do fuso horário atual que você está usando no seu dispositivo na tabela 'tempo' usando a função 'agora ()', como mostrado abaixo.

>> Insira nos valores do tempo (agora (), agora ());

Agora você pode buscar o registro da tabela 'tempo' usando a consulta selecionada como abaixo. A coluna 'sem_timeZone' mostra a data e a hora atuais sem um fuso horário, enquanto a coluna 'with_timezone' mostra a hora local com o fuso horário completamente.

>> selecione * do tempo;

Vamos mudar o fuso horário para 'EUA/leste' da consulta abaixo.

>> Defina o fuso horário da sessão 'EUA/Eastern';

Agora vamos verificar a tabela novamente. Você verá como o valor da coluna 'With_timeZone' foi exibido de acordo com o Timebone 'US/Eastern', mas o valor de 'sem_timeZone' é o mesmo que antes.

>> selecione * do tempo;

Exemplo 04:

Vamos ter mais alguns exemplos para o método to_char (). Assuma o mesmo tabela acima 'tempo'. Estaremos convertendo a coluna 'sem_timezone' valor em uma string que é composta de horas, minutos, segundos e fuso horário. Vamos experimentar a consulta selecionada usando o método to_char () para converter o valor da coluna 'sem_timezone'. Mencionamos 'TZ' em nossa consulta, mas não mostrará o fuso horário porque o valor da coluna não consiste no fuso horário. O comando declarado-amante fornece a saída:

>> Selecione TO_CHAR (sem_timeZone, 'HH12: MI: SS TZ') a partir do tempo;

Agora vamos tentar a mesma consulta no caso da outra coluna 'With_timeZone', para convertê -la na série de horas, minutos, segundos e fuso horário. Desta vez, ele mostrará o fuso horário com o tempo também usando a consulta abaixo.

>> Selecione TO_CHAR (With_timeZone, 'HH12: MI: SS TZ') a partir do tempo;

Conclusão:

Como o problema com o fuso horário com/sem tempo afeta mais do que apenas a partição da tabela, eu recomendo que você use o tipo de fuso horário sempre que possível. Quase todas as diretrizes discutiram como fazer purga dependente do tempo no PostGresql usando o horário local. Uma solução adequada e sensível ao fuso horário acrescenta poucas complicações, mas pode salvá-lo de problemas no futuro.