Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

275
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!