如何从 MySQL 中的日期时间中减去小时数?

Posted

技术标签:

【中文标题】如何从 MySQL 中的日期时间中减去小时数?【英文标题】:How to subtract hours from a datetime in 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 只知道日期部分,而不是时间。

【问题讨论】:

【参考方案1】:

mysqlDATE_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 是表名。

【讨论】:

以上是关于如何从 MySQL 中的日期时间中减去小时数?的主要内容,如果未能解决你的问题,请参考以下文章

从雪花中的日期时间减去 2 小时

R - 从日期减去小时数

从sql中的表中减去两个日期

如何从/到日期减去/添加天数?

如何在oracle中减去2个日期以获得小时和分钟的结果

PHP,需要从 DateTime 中减去 12 小时 30 分钟