UNIX_TIMESTAMP() 在 MySQL 请求中重复多次

UNIX_TIMESTAMP() repeated more than once in MySQL request

我需要在 MySQL 请求中获取当前日期(和时间 00:00:00)纪元时间戳。我想用数学表达式来做到这一点:(UNIX_TIMESTAMP() - (UNIX_TIMESTAMP() % 86400)).

但这不止一次调用了 UNIX_TIMESTAMP();所以问题是 - 是否有可能两个 UNIX_TIMESTAMP() 功能 return 不同的时间?这种情况下的解决方法是什么?

或者 MySQL 执行一次 UNIX_TIMESTAMP(),并用当前时间戳替换所有其他调用并且不需要解决方法?

SELECT @ut:=UNIX_TIMESTAMP(), (@ut - (@ut % 86400)) AS ep;

您可以使用 UNIX_TIMESTAMP(NOW()),因为 NOW() returns 语句开始执行时的时间戳,因此它在同一语句中的多个调用中表现一致。

NOW() returns a constant time that indicates the time at which the statement began to execute. (Within a stored function or trigger, NOW() returns the time at which the function or triggering statement began to execute.)

您可以简单地使用 UNIX_TIMESTAMP(),这将 return 当前查询的开始时间。

这没有明确记录 — 文档一般参考 "Functions that return the current date or time ..." 的稳定性 — 但确实如此。