sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo funciona make_interval() en PostgreSQL

En PostgreSQL, el make_interval() La función crea un intervalo a partir de campos de años, meses, semanas, días, horas, minutos y segundos.

Proporcionas los campos de años, meses, semanas, días, horas, minutos y/o segundos, y devolverá un intervalo en el intervalo tipo de datos.

Sintaxis

La función tiene la siguiente sintaxis:

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)

Ejemplo

Aquí hay un ejemplo para demostrarlo.

SELECT make_interval(1, 2, 3, 4, 5, 6, 7);

Resultado:

1 year 2 mons 25 days 05:06:07

En este ejemplo, proporcioné los siete argumentos.

Este es el mecanismo tradicional para pasar argumentos a funciones en PostgreSQL y se conoce como "notación posicional".

Cuando se usa notación posicional, todos los argumentos se especifican en orden.

Notación con nombre

Aquí hay un ejemplo usando notación con nombre.

SELECT make_interval(days => 12);

Resultado:

12 days

En este ejemplo, uso la notación con nombre para especificar solo un argumento. Esto me evita tener que ingresar todos los argumentos, solo para especificar la cantidad de días.

Todos los argumentos tienen un valor predeterminado de cero, por lo que no hay un impacto adverso al omitirlos.

Esto es lo que sucede si no uso la notación con nombre al especificar solo un argumento.

SELECT make_interval(12);

Resultado:

12 years

Supuso que me refería a 12 años.

Lo bueno de la notación con nombre es que puede proporcionar tantos argumentos como necesite, y no más.

Por ejemplo:

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

Resultado:

10 mons 5 days 00:47:00

Notación nombrada heredada

Las versiones anteriores de Postgres usaban una sintaxis ligeramente diferente para la notación con nombre. Esta sintaxis usa := en lugar de => .

Ejemplo:

SELECT make_interval(days := 12);

Resultado:

12 days

A partir de Postgres 12, esta sintaxis aún funciona para la compatibilidad con versiones anteriores.

Semanas y Días

Con los intervalos de Postgres, las semanas se representan como días. Entonces, si especifica las weeks argumento, el resultado será en días.

SELECT make_interval(weeks => 2);

Resultado:

14 days

Por lo tanto, si también especifica los days argumento, se agregará a los días producidos por las weeks argumento.

SELECT make_interval(weeks => 2, days => 3);

Resultado:

17 days

Estilo de salida de intervalo

En Postgres, el formato de salida del tipo de intervalo se puede establecer en uno de los siguientes cuatro estilos de intervalo:

  • sql_standard
  • postgres
  • postgres_verbose
  • iso_8601

Puede configurar esto usando SET intervalstyle . El valor predeterminado es postgres formato.

Todos los ejemplos anteriores usan el formato predeterminado (postgres ).

Aquí hay un ejemplo que demuestra la salida de make_interval() cuando se usan diferentes estilos de salida.

sql_estándar

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

Resultado:

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

postgres

Esta es la configuración predeterminada.

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

Resultado:

1 año 2 meses 25 días 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