No PostgreSQL, o
make_timestamptz()
A função permite que você crie um timestamp com fuso horário de seus campos de ano, mês, dia, hora, minuto e segundos, bem como um campo opcional de fuso horário. Sintaxe
A função tem a seguinte sintaxe:
make_timestamptz(year int, month int, day int, hour int, min int, sec double precision, [ timezone text ])
Onde
year
, month
e day
são números inteiros que representam o ano, mês e dia da data e hour
é a parte da hora, min
é a parte dos minutos e sec
é a parte dos segundos. A hora e os minutos são fornecidos como um inteiro , os segundos são fornecidos como precisão dupla .
O
timezone
opcional argumento é para o fuso horário. Se não for especificado, o fuso horário atual será usado. O resultado é retornado como um horário com fuso horário .
Exemplo
Aqui está um exemplo básico para demonstrar.
SELECT make_timestamptz(1999, 03, 14, 10, 35, 12.15);
Resultado:
1999-03-14 10:35:12.15+10
Nesse caso, não forneci um fuso horário, então usei o fuso horário atual.
Podemos verificar o tipo de retorno com a seguinte consulta.
SELECT pg_typeof(make_timestamptz(1999, 03, 14, 10, 35, 12.15));
Resultado:
timestamp with time zone
O
pg_typeof()
A função retorna o tipo de dado de seu argumento, então eu passei make_timestamptz()
como o argumento. Especificar um fuso horário
Neste exemplo, forneço explicitamente um fuso horário.
SELECT make_timestamptz(1999, 03, 14, 10, 35, 12.15, 'Indian/Mauritius');
Resultado:
1999-03-14 16:35:12.15+10
Aqui está outro exemplo, mas com vários valores de fuso horário.
\x
SELECT
make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'ACDT'),
make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'ACST'),
make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'ACT'),
make_timestamptz(2000, 01, 01, 00, 01, 00.00, '+01'),
make_timestamptz(2000, 01, 01, 00, 01, 00.00, '-01'),
make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'NZ');
Resultado (usando saída vertical):
make_timestamptz | 1999-12-31 23:31:00+10 make_timestamptz | 2000-01-01 00:31:00+10 make_timestamptz | 2000-01-01 15:01:00+10 make_timestamptz | 2000-01-01 09:01:00+10 make_timestamptz | 2000-01-01 11:01:00+10 make_timestamptz | 1999-12-31 21:01:00+10
Neste exemplo eu usei
\x
para habilitar a exibição expandida (também conhecida como “saída vertical”) para facilitar a leitura dos resultados. Inserindo
\x
alterna a exibição expandida (ou seja, ativa e desativa). Consulte Retornar uma lista de fusos horários suportados pelo PostgreSQL para obter uma lista de fusos horários válidos.
Fora do alcance
Se algum dos argumentos estiver fora do intervalo dos valores possíveis para sua parte de data, você receberá um erro "fora do intervalo".
SELECT make_timestamptz(1999, 03, 32, 10, 35, 12.15);
Resultado:
ERROR: date field value out of range: 1999-03-32
Nesse caso, o dia era 32, o que está fora do intervalo e, portanto, a mensagem explicava que o valor do campo de data estava fora do intervalo.
Se apenas o valor do campo de tempo estiver fora do intervalo, o erro será redigido de acordo.
SELECT make_timestamptz(1999, 03, 30, 10, 61, 12.15);
Resultado:
ERROR: time field value out of range: 10:61:12.15
Neste caso, os
minutes
argumento é 61, que está fora do intervalo. Carimbo de data e hora sem fuso horário
Para criar um timestamp sem fuso horário, use o
make_timestamp()
função.