• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

109
Views
Resultados extraños de marzo de Postgres

Estoy tratando de calcular el tiempo prorrateado entre dos fechas durante períodos de varios meses usando SQL en PostgresSQL.

Mi fórmula es bastante simple.

 select iot.*, (iot.DATE_FIN - iot.DATE_DEBUT)::double precision / NULLIF( extract (day from iot.DATE_FIN - date_trunc('month', iot.DATE_DEBUT)), 0::double precision) as prorata from ( select DATE '2020-05-01' as DATE_DEBUT, DATE '2020-05-31' as DATE_FIN ) iot

Dame el resultado esperado => 1

Pero cuando cambio a marchar con

 select iot.*, (iot.DATE_FIN - iot.DATE_DEBUT)::double precision / NULLIF(extract (day from iot.DATE_FIN - date_trunc('month', iot.DATE_DEBUT)), 0::double precision) as prorata from ( select DATE '2020-03-01' as DATE_DEBUT, DATE '2020-03-31' as DATE_FIN ) iot

Obtuve un resultado extraño de 1.0344827586206897

¿Algunas ideas?

about 3 years ago · Santiago Trujillo
1 answers
Answer question

0

Esto es causado por date_trunc('month' , esta función devuelve una fecha con una zona horaria, pero todo su cálculo no maneja la zona horaria.

Si obliga a Postgres a ignorar la zona horaria, debería funcionar:

 select iot.*, (iot.DATE_FIN - iot.DATE_DEBUT)::double precision / NULLIF(extract (day from iot.DATE_FIN - date_trunc('month', iot.DATE_DEBUT)::timestamp without time zone), 0::double precision) as prorata from ( select DATE '2020-03-01' as DATE_DEBUT, DATE '2020-03-31' as DATE_FIN ) iot

Acabo de emitir date_trunc con ::timestamp without time zone .

about 3 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 Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error