gpt4 book ai didi

mysql - 如何在 MySQL 中计算小数年

转载 作者:行者123 更新时间:2023-11-29 14:10:14 25 4
gpt4 key购买 nike

计算小数年日期差异的最佳方法是什么?

year(date1) - year(date2) always gives a whole number

使用unix_timestamp将为闰年和非闰年提供不同的值(即,20NN年3月1日到20NN+1年3月1日应始终为1.00年)。我可以将日期分解为几个月和几天,实际上,是手工完成的。

但我正在寻找最好的方法 - 意味着最简单并且需要最少的调试时间(如果我自己这样做,我会花半个晚上测试边缘情况)。

最佳答案

我认为您不会找到一种简单的方法来完成您想要做的事情。为了转换为某个十进制值,您必须了解分子和分母是什么。正如您自己所指出的,分母会因闰年和非闰年而异。这将使您必须定义一年中哪些具体日期的分母为 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)

我们的日历系统并不真正有利于对其进行数学计算,因此通常情况下,您只需接受合理的近似值并了解其局限性即可。

关于mysql - 如何在 MySQL 中计算小数年,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13616036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com