如何在MySQL中从日期时间中减去3个小时?
在MySQL中需要经常处理日期和时间的问题,比如说需要从一个日期时间中减去某一个时间间隔,然后得到一个新的日期时间。比如说在日志分析中,我们需要将时间转换为UTC时间,即世界协调时间。在MySQL中,我们可以通过减去时间间隔来实现这个目的。
阅读更多:MySQL 教程
1. DATE_SUB函数
MySQL中的DATE_SUB函数可以用来从一个日期或时间字段中减去一个时间间隔。它的基本语法如下:
DATE_SUB(date, INTERVAL expr unit)
其中,date是要进行计算的日期或时间字段,expr是要减去的时间间隔,unit是时间间隔的单位,可以是MICROSECOND、SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER、YEAR。不同的时间间隔和单位可以通过不同的数字组合来表示。例如,传入的expr可以是一个小数,也可以是一个整数加上一个单位,比如说:
DATE_SUB('2021-08-25 12:00:00', INTERVAL 3 HOUR)
这个语句将会从日期时间’2021-08-25 12:00:00’中减去3个小时,得到新的日期时间’2021-08-25 09:00:00’。
2. TIMESTAMPADD函数
另一个可以实现相同目的的函数是TIMESTAMPADD函数。它的语法如下:
TIMESTAMPADD(unit,interval,timestamp_expr)
其中,unit、interval和timestamp_expr的含义和DATE_SUB函数的参数是一样的。TIMESTAMPADD函数会将timestamp_expr加上interval的时间间隔,而不是减去interval。因此,为了从一个日期或时间字段中减去一个时间间隔,我们可以将参数interval换成负数即可。比如说:
TIMESTAMPADD(HOUR,-3,'2021-08-25 12:00:00')
这个语句将会从日期时间’2021-08-25 12:00:00’中减去3个小时,得到新的日期时间’2021-08-25 09:00:00’。
3. 示例代码
下面是一个示例代码,展示如何在MySQL中使用DATE_SUB函数和TIMESTAMPADD函数来从一个日期或时间字段中减去一个时间间隔:
-- 创建一个示例表
CREATE TABLE timestamps (
id INT(11) NOT NULL AUTO_INCREMENT,
datetime DATETIME NOT NULL,
PRIMARY KEY (id)
);
-- 插入一些示例数据
INSERT INTO timestamps (datetime) VALUES
('2021-08-25 12:00:00'),
('2021-08-25 10:00:00'),
('2021-08-25 08:00:00'),
('2021-08-24 12:00:00'),
('2021-08-23 12:00:00');
-- 从每个日期时间中减去3个小时,并将结果输出
SELECT datetime,
DATE_SUB(datetime, INTERVAL 3 HOUR) AS new_datetime_1,
TIMESTAMPADD(HOUR,-3,datetime) AS new_datetime_2
FROM timestamps;
这个代码将会创建一个名为timestamps的表,并向其中插入一些示例数据。然后,它会从每个日期时间中减去3个小时,并将结果输出。输出的结果如下所示:
| datetime | new_datetime_1 | new_datetime_2 |
|---|---|---|
| 2021-08-25 12:00:00 | 2021-08-25 09:00:00 | 2021-08-25 09:00:00 |
| 2021-08-25 10:00:00 | 2021-08-25 07:00:00 | 2021-08-25 07:00:00 |
| 2021-08-25 08:00:00 | 2021-08-25 05:00:00 | 2021-08-25 05:00:00 |
| 2021-08-24 12:00:00 | 2021-08-24 09:00:00 | 2021-08-24 09:00:00 |
| 2021-08-23 12:00:00 | 2021-08-23 09:00:00 | 2021-08-23 09:00:00 |
这个结果表明,通过DATE_SUB函数和TIMESTAMPADD函数,我们可以从日期或时间字段中减去一个时间间隔,并得到新的日期或时间字段。
结论
在MySQL中,如果需要从一个日期或时间字段中减去一个时间间隔,可以使用DATE_SUB函数或TIMESTAMPADD函数。其中,DATE_SUB函数会直接从日期或时间字段中减去一个时间间隔,而TIMESTAMPADD函数则会将时间间隔加上去,需要我们传入一个负数的时间间隔来实现减法。无论使用哪种方法,都可以得到一个新的日期或时间字段。
极客笔记