【问题标题】:UNIX_TIMESTAMP() repeated more than once in MySQL requestUNIX_TIMESTAMP() 在 MySQL 请求中重复多次
【发布时间】:2015-03-07 14:20:04
【问题描述】:

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

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

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

【问题讨论】:

  • 我可以在一秒结束时返回两个不同的时间戳
  • 好的,解决方法是什么?无需程序。我需要获取表示当前日期和时间 00:00:00 的时间戳。
  • @EdHeal,可以吗? SELECT UNIX_TIMESTAMP(), SLEEP(5), UNIX_TIMESTAMP()

标签: mysql unix-timestamp


【解决方案1】:

您可以使用UNIX_TIMESTAMP(NOW()),因为NOW() 返回语句开始执行时的时间戳,因此它会在同一语句中的多次调用中保持一致。

NOW() 返回一个常数时间,该时间指示 语句开始执行。 (在存储的函数或触发器中, NOW() 返回函数或触发语句的时间 开始执行。)

【讨论】:

  • 所以我可以使用 UNIX_TIMESTAMP(NOW()) - (UNIX_TIMESTAMP(NOW()) % 86400)?
  • 没有必要。不带参数的 UNIX_TIMESTAMP 对于事务也是固定的。
  • @pilcrow 这样我就可以使用我在帖子中首次定义的表达式,它总是正确的?
  • @deselect,是的。我在上面说错了。我的意思是“为当前查询修复”,not 为当前事务。我已经把它放到另一个答案中。
【解决方案2】:
SELECT @ut:=UNIX_TIMESTAMP(), (@ut - (@ut % 86400)) AS ep;

【讨论】:

    【解决方案3】:

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

    这没有明确记录——文档一般提到“返回当前日期或时间的函数......”的稳定性——但确实如此。

    【讨论】:

      猜你喜欢
      • 2011-10-09
      • 2017-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-11
      • 2011-02-16
      • 2016-08-29
      • 2013-11-23
      相关资源
      最近更新 更多