Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

263
Vistas
¿El EXTRACT(QUARTER FROM <interval>) de PostgreSQL está basado en 1?

Considere la siguiente consulta:

 SELECT INTERVAL '1 month' * v AS i, EXTRACT(YEAR FROM INTERVAL '1 month' * v) AS y, EXTRACT(QUARTER FROM INTERVAL '1 month' * v) AS q, EXTRACT(MONTH FROM INTERVAL '1 month' * v) AS m FROM generate_series(0, 16) t(v)

Se produce, para mi sorpresa:

 i |y|q|m | -------------|-|-|--| 00:00:00|0|1| 0| 1 mon|0|1| 1| 2 mons|0|1| 2| 3 mons|0|2| 3| 4 mons|0|2| 4| 5 mons|0|2| 5| 6 mons|0|3| 6| 7 mons|0|3| 7| 8 mons|0|3| 8| 9 mons|0|4| 9| 10 mons|0|4|10| 11 mons|0|4|11| 1 year|1|1| 0| 1 year 1 mon|1|1| 1| 1 year 2 mons|1|1| 2| 1 year 3 mons|1|2| 3| 1 year 4 mons|1|2| 4|

Entonces, al extraer un QUARTER de un INTERVAL "normalizado" de este tipo (producido por una expresión INTERVAL '1 month' * <some integer> ), obtenemos valores 1-4 (como si esta extracción fuera de alguna manera basada en 1), mientras que extraer un YEAR o MONTH de un INTERVAL produce valores 0-N ( YEAR ) o 0-11 ( MONTH ), respectivamente.

¿Cuál es la razón detrás de este comportamiento? ¿Está documentado? (No creo que esté documentado aquí, explícitamente )

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Sí, lo es.

Parece que se esfuerza por evitar una lectura simple de la documentación. La sección 9.1.1 comienza:

9.9.1. EXTRACTO, fecha_parte

 EXTRACT(field FROM source)

La función de extracción recupera subcampos como el año o la hora a partir de valores de fecha/hora. source debe ser una expresión de valor de tipo timestamp, time o interval . ... Los siguientes son nombres de campo válidos

(Mi énfasis )

Luego pasa a describir cada campo y los valores que son posibles. En ausencia de cualquier indicador de lo contrario, esta es la documentación de lo que sucede cuando se extraen campos de un intervalo.

Y, de hecho, vemos por ejemplo el day :

Para valores de timestamp de tiempo, el campo de día (del mes) (1 - 31) ; para valores de interval , el número de días

Entonces, podemos ver que, cuando deseen resaltar una diferencia entre el intervalo y la marca de tiempo, pueden hacerlo en descripciones de campos individuales. De manera similar, para el month , documentan por separado la marca de tiempo y el manejo de intervalos, por lo que parecen tener una forma consistente de documentar las diferencias.

Entonces, finalmente, llegamos al quarter :

El trimestre del año (1 - 4) en el que se encuentra la fecha

Eso es todo. Esa es la documentación, y se aplica igualmente a las marcas de tiempo y los intervalos.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda