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

Como make_interval() funciona no PostgreSQL


No PostgreSQL, o make_interval() A função cria um intervalo de campos de anos, meses, semanas, dias, horas, minutos e segundos.

Você fornece os campos anos, meses, semanas, dias, horas, minutos e/ou segundos, e ele retornará um intervalo no intervalo tipo de dados.

Sintaxe


A função tem a seguinte sintaxe:
make_interval(years int DEFAULT 0, months int DEFAULT 0, weeks int DEFAULT 0, days int DEFAULT 0, hours int DEFAULT 0, mins int DEFAULT 0, secs double precision DEFAULT 0.0)

Exemplo


Aqui está um exemplo para demonstrar.
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);

Resultado:
1 year 2 mons 25 days 05:06:07

Neste exemplo, forneci todos os sete argumentos.

Este é o mecanismo tradicional para passar argumentos para funções no PostgreSQL e é conhecido como “notação posicional”.

Ao usar a notação posicional, todos os argumentos são especificados em ordem.

Notação nomeada


Aqui está um exemplo usando notação nomeada.
SELECT make_interval(days => 12);

Resultado:
12 days

Neste exemplo, eu uso a notação nomeada para especificar apenas um argumento. Isso me poupa de ter que inserir todos os argumentos, apenas para especificar o número de dias.

Todos os argumentos padrão são zero, portanto, não há impacto adverso ao omiti-los.

Aqui está o que acontece se eu não usar a notação nomeada ao especificar apenas um argumento.
SELECT make_interval(12);

Resultado:
12 years

Ele assumiu que eu quis dizer 12 anos.

O bom da notação nomeada é que você pode fornecer quantos argumentos precisar e nada mais.

Por exemplo:
SELECT make_interval(months => 10, days => 5, mins => 47);

Resultado:
10 mons 5 days 00:47:00

Notação nomeada herdada


Versões mais antigas do Postgres usavam uma sintaxe ligeiramente diferente para notação nomeada. Esta sintaxe usa := em vez de => .

Exemplo:
SELECT make_interval(days := 12);

Resultado:
12 days

A partir do Postgres 12, essa sintaxe ainda funciona para compatibilidade com versões anteriores.

Semanas e dias


Com intervalos Postgres, as semanas são representadas como dias. Portanto, se você especificar as weeks argumento, o resultado será em dias.
SELECT make_interval(weeks => 2);

Resultado:
14 days

Portanto, se você também especificar os days argumento, ele será adicionado aos dias produzidos pelas weeks argumento.
SELECT make_interval(weeks => 2, days => 3);

Resultado:
17 days

Estilo de saída de intervalo


No Postgres, o formato de saída do tipo de intervalo pode ser definido para um dos quatro estilos de intervalo a seguir:
  • sql_standard
  • postgres
  • postgres_verbose
  • iso_8601

Você pode definir isso usando SET intervalstyle . O padrão é o postgres formato.

Todos os exemplos anteriores usam o formato padrão (postgres ).

Aqui está um exemplo que demonstra a saída de make_interval() ao usar estilos de saída diferentes.

sql_standard

SET intervalstyle = 'sql_standard';
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);

Resultado:
+1-2 +25 +5:06:07

postgres


Esta é a configuração padrão.
SET intervalstyle = 'postgres';
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);

Resultado:

1 ano 2 seg 25 dias 05:06:07

postgres_verbose

SET intervalstyle = 'postgres_verbose';
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);

Resultado:
@ 1 year 2 mons 25 days 5 hours 6 mins 7 secs

iso_8601

SET intervalstyle = 'iso_8601';
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);

Resultado:
P1Y2M25DT5H6M7S