几年前,我写了一个查询,现在在回顾这些旧代码时,我试图弄清楚为什么我会按照以前的方式来做。据我所知,其目的是简单地从 UNIX 时间戳中提取年份。谁能告诉我使用的好处是什么:
YEAR(DATE_ADD(DATE_SUB(DATE_ADD(FROM_UNIXTIME( 0 ), INTERVAL FullDate SECOND), INTERVAL @@session.time_zone HOUR_MINUTE), INTERVAL '08:00' HOUR_MINUTE))
而不是简单地:
DATE_FORMAT(FROM_UNIXTIME(FullDate), '%Y')
最佳答案
看起来您正在尝试补偿当前时区的任何内容,然后输出时区 UTC+8:00
中的(年份)当前时间(适用于来自的国家/地区) Wikipedia ).
因此 DATE_ADD(FROM_UNIXTIME( 0 ), INTERVAL FullDate SECOND)
为您提供当前时区的当前时间; DATE_SUB(..., INTERVAL @@session.time_zone HOUR_MINUTE)
将其转换为 UTC,然后 DATE_ADD(..., INTERVAL '08:00' HOUR_MINUTE)
将时间转换为 UTC+8:00
。
如果您不想进行时区转换,那么 DATE_FORMAT(FROM_UNIXTIME(FullDate), '%Y')
将完成这项工作,事实上 FROM_UNIXTIME(FullDate , '%Y')
或 YEAR(FROM_UNIXTIME(FullDate))
关于MySQL 年份比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51957908/