如何从 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】: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;
lastname 和 changedat 是字段名,employee_audit 是表名。
【讨论】:
以上是关于如何从 MySQL 中的日期时间中减去小时数?的主要内容,如果未能解决你的问题,请参考以下文章