使用MySQL获取与分钟的差异

时间:2014-01-30 10:09:37

标签: mysql sql

我有一个MySQL表,其中包含end_date类型DATETIME的字段,用于存储UTC日期。我希望得到NOW()end_date之间的分钟差异。我alredy在stackoverflow上发现了很多问题和答案来执行此操作,有些使用UNIX_TIMESTAMP从我理解的内容中获取输入值并将其转换为UTC(所以我不能使用它,因为我的日期是alredy (UTC)和其他建议使用TIME_TO_SEC并除以60。这就是我选择的内容:

INTERVAL (TIME_TO_SEC(UTC_TIMESTAMP()) - TIME_TO_SEC(end_date)) / 60 MINUTE

直到当天与end_date天不同,它才能正常工作。此时,减法的结果是否定的,当我在DATE_ADD函数中使用此代码时,它会输出错误的结果。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

尝试ABS

INTERVAL (ABS( TIME_TO_SEC(UTC_TIMESTAMP()) - TIME_TO_SEC(end_date))) / 60 MINUTE

或者,如果您总是想要肯定的差异,那么请end_date检查它是否晚于nowutc_timestamp。如果稍后将其替换为now,则差异将为0

答案 1 :(得分:2)

尝试使用

INTERVAL (TO_SECONDS(UTC_TIMESTAMP()) - TO_SECONDS(end_date)) / 60 MINUTE

答案 2 :(得分:0)

您可以使用MySQL的TIMESTAMPDIFF()功能:

SELECT TIMESTAMPDIFF(MINUTE, CURRENT_TIME, end_date)
FROM   my_table

但请注意,对于此应用程序,您应该使用MySQL的TIMESTAMP数据类型(在会话的time_zone和UTC之间自动转换以进行存储)而不是DATETIME(不执行任何操作)时区转换,但只是存储值,就好像拍了一张日历和时钟的照片一样。因此,如果您的会话time_zone不是UTC,那么您当前的DATETIME字段会因缺少时区转换而出现错误 - 您必须明确调整此类差异,例如:使用CONVERT_TZ()

有关详细信息,请参阅MySQL Server Time Zone Support