如何在MySQL中计算分数年

如何在MySQL中计算分数年,mysql,Mysql,以分数年计算日期差的最佳方法是什么 year(date1) - year(date2) always gives a whole number 使用unix_时间戳将为闰年和非闰年提供不同的值(即20NN年3月1日到20NN年3月1日,20NN+1应始终为1.00年)。我可以把日期分解成月和日,实际上,我可以手工完成 但是我正在寻找最好的方法,也就是说最简单,需要最少调试时间(如果我自己做的话,我会花半个晚上测试edge案例)。我不认为你会找到一种简单的方法来完成你想做的事情。为了转换成一些十

以分数年计算日期差的最佳方法是什么

year(date1) - year(date2) always gives a whole number
使用unix_时间戳将为闰年和非闰年提供不同的值(即20NN年3月1日到20NN年3月1日,20NN+1应始终为1.00年)。我可以把日期分解成月和日,实际上,我可以手工完成


但是我正在寻找最好的方法,也就是说最简单,需要最少调试时间(如果我自己做的话,我会花半个晚上测试edge案例)。

我不认为你会找到一种简单的方法来完成你想做的事情。为了转换成一些十进制值,你必须理解分子和分母是什么。正如你自己指出的,分母在闰年和非闰年之间会有所不同。这将使您不得不定义一年中哪几天的分母为365,哪几天的分母为366(即闰年1月1日至12月31日的所有日子的分母是否为366,或者366的分母是否在闰年前一年的3月1日至闰年的2月29日之间运行?)

您将不得不对范围内每天的值(1/365或1/366)求和。假设您将闰年的开始日期定义为1月1日-对于3月1日(闰年)-3月1日(非闰年),这仍然不会给出1的确切值,因为有些日子的分母为365,有些日子的分母为366

如果从闰年前一年的3月1日开始定义366的分母,那么对于3月1日-3月1日的情况,您应该正好得到一个分母,但是如果您想在2月1日(闰年)-8月1日(非闰年)进行定义,现在会发生什么呢。对于这6个月的差异,你现在不会得到0.5

我的猜测是,你最好通过做以下事情来近似你的数学

ROUND(( DATEDIFF(date1, date2) / 365.25), 2)
对于365天差异(365/365.25=0.9993)和366天差异(366/365.25=1.0021),这将为您提供1.00

当然,这也意味着3月2日(非闰年)-3月1日(非闰年)也将为您提供1.00的值。但是,如果精度为两位小数,则使用365作为分母(366/365=1.0027)将获得该值


我们的日历系统实际上不利于对其进行数学运算,因此,通常情况下,您只需接受合理的近似值并理解其局限性。

您的意思是:

select datediff(curdate(),'2000-01-01') / 365.25

您是否尝试转换为浮点/十进制或其他形式?@tpaksu-year()被定义为返回日期或日期时间的年份部分,因此两年之间的差值始终是一个整数。
选择datediff(curdate(),'2000-01-01')
提供日差。当你把它除以365.6,我想你会得到分数年。对不起,把它除以365.25。6是不对的。你打算如何使用这个计算结果?我怀疑你的前提是错误的(你以错误的方式处理根本问题),因为这没有真正意义。