如果我正确理解你的问题,我的想法是计算明年第一天和当年第一天之间的秒数:
SELECT UNIX_TIMESTAMP(MAKEDATE(1994+1,1)) - UNIX_TIMESTAMP(MAKEDATE(1994,1))
然后将此数字乘以给定日期的小数部分:
SELECT (UNIX_TIMESTAMP(MAKEDATE(1994+1,1)) - UNIX_TIMESTAMP(MAKEDATE(1994,1))) * 0.232424
这给出了自年初以来的秒数。然后,您可以将此秒数添加到一年的第一天:
SELECT
MAKEDATE(1994,1)
+ INTERVAL (UNIX_TIMESTAMP(MAKEDATE(1994+1,1))
- UNIX_TIMESTAMP(MAKEDATE(1994,1))) * 0.232424 SECOND;
这是一个通用查询:
SET @yourdate = 1994.232424;
SELECT
MAKEDATE(TRUNCATE(@yourdate, 0),1)
+ INTERVAL (UNIX_TIMESTAMP(MAKEDATE(TRUNCATE(@yourdate, 0)+1,1))
- UNIX_TIMESTAMP(MAKEDATE(TRUNCATE(@yourdate, 0),1))) *
(@yourdate-TRUNCATE(@yourdate, 0)) SECOND;
编辑
我想使用 UNIX_TIMESTAMP 因为我不想计算一年是否是闰年,我只想让 MySql 自动计算它。但还有其他选择。
如果年份是闰年,则一年中的秒数是 31536000 + 86400 多。
另一个想法是使用MAKEDATE(year, 60)
, 查看返回的日期是三月还是二月。MAKEDATE(TRUNCATE(@yourdate, 0),60)=2
闰年将被评估为 TRUE (=1),否则为 FALSE (=0):
SELECT
MAKEDATE(TRUNCATE(@yourdate, 0),1)
+ INTERVAL (31536000 + (MAKEDATE(TRUNCATE(@yourdate, 0),60)=2)*(86400)) *
(@yourdate-TRUNCATE(@yourdate, 0)) SECOND;
但当然你可以使用你的公式:
(31536000 + (((@year % 4 = 0) AND (@year % 100 != 0)) OR (@year % 400 = 0))*86400)
计算一年中的秒数,然后将此结果乘以小数部分。