【问题标题】:How to subtract hours from a datetime in MySQL?如何从 MySQL 中的日期时间中减去小时数?
【发布时间】:2011-08-26 14:00:34
【问题描述】:

我得到一个日期时间字段,目前在查询中为:

SELECT DATE_FORMAT(x.date_entered, '%Y-%m-%d') AS date FROM x ORDER BY date ASC

我想做的是从那个日期减去 3 小时(GMT 问题),但我不能在 PHP 中这样做,因为 PHP 只知道日期部分,而不是时间。

【问题讨论】:

    标签: mysql datetime gmt


    【解决方案1】:

    mySQL 有DATE_SUB():

    SELECT DATE_SUB(column, INTERVAL 3 HOUR)....
    

    但是尝试解决潜在的时区问题不是更好吗?

    【讨论】:

    • 好吧,格林威治标准时间并不是我可以改变的东西(该死的传统),但如何以我需要的格式获得它? %Y-%m-%d
    • @Lucas 我不知道你为什么首先要做DATE_FORMAT() - DATE(x.date_entered) 还没有做吗?最后一行是DATE(DATE_SUB(x.date_entered, INTERVAL 3 HOUR))
    • 我想将日期预格式化为我想要的格式(YYYY/MM/DD),但我不确定如何在 PHP 中执行此操作,所以我使用了 SQL。
    • @Lucas 啊,很公平。然后将 DATE_FORMAT 包裹在 DATE_SUB 指令周围,它应该可以工作。
    • 但是我们怎样才能减去小时数才能得到(昨天的日期和时间戳,例如 23:00:00)
    【解决方案2】:

    假设您有一些时区问题并且知道源和目标时区,您可以像这样转换它

    SELECT DATE_FORMAT(CONVERT_TZ(x.date_entered, 'UTC', 'Europe/Berlin'),
                       '%Y-%m-%d') AS date
    FROM x ORDER BY date ASC;
    

    【讨论】:

    • 这在很多情况下可能是一个“正确”的解决方案,但不幸的是它需要时区表已经安装了mysql。否则,你只会得到 NULL。我根据那些是最正确解决方案的特定时区问题给了它一个赞成票。例如,您可能有两个位于不同时区的区域,其中只有一个使用夏令时,因此有时会相差 3 小时,有时会相差 2 小时(或 4 小时)。
    【解决方案3】:

    普通选择查询。

    一旦在 MySQL 中应用 DATE_ADD() 函数

    select lastname, 
        date_add(changedat, interval -24 hour) as newdate
    from employee_audit;
    

    lastnamechangedat 是字段名,employee_audit 是表名。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多