试图找出MySQL中两个日期之间的小时差异

时间:2018-06-06 14:32:47

标签: mysql datediff

我一直在尝试学习一些SQL,但我很挣扎于语言。我试图从表中找出两个日期(出发和到达)之间的差异。其他地方已声明使用DATEDIFF,但我试图直接从表中提取数据而不是手动键入日期。这是我尝试使用此功能的可怕尝试

SELECT DATEDIFF(a.departure_time, a.arrival_time) as HourDiff;
FROM airlines a
WHERE HourDiff >= 8

我也试图找出超过8小时的时间差异,但说实话,我真的不知道我现在在做什么......我应该写的正确方法是什么此?

2 个答案:

答案 0 :(得分:3)

尝试使用此查询:

SQL SERVER的语法

SELECT DATEDIFF(hour, a.departure_time, a.arrival_time) as HourDiff
FROM airlines a
WHERE DATEDIFF(hour, a.departure_time, a.arrival_time) >= 8

MySQL的语法

SELECT TIMESTAMPDIFF(hour, a.departure_time, a.arrival_time) as HourDiff
FROM airlines a
WHERE TIMESTAMPDIFF(hour, a.departure_time, a.arrival_time) >= 8

答案 1 :(得分:1)

如果您在departure_time列上有索引,那么如果您使用以下内容,则可能会获得更好的结果:

SELECT DATEDIFF(hour, a.departure_time, a.arrival_time) as HourDiff
FROM airlines a
WHERE a.departure_time >= DATE_ADD(hour, -8, a.arrival_time);

如果您正在运行 MySQL 5.7 或更高版本,为了充分利用此查询,我建议您在表格中添加computed column

ALTER TABLE airlines 
ADD HourDiff Integer AS DATEDIFF(hour, departure_time, arrival_time);

然后我将继续在此列上创建一个索引:

ALTER TABLE airlines 
ADD INDEX HoursDiff_IX (HourDiff);

然后您可以将查询简化为:

SELECT HourDiff
FROM airlines
WHERE HourDiff >= 8;

您甚至可以继续在查询中选择更多列,并且可能接近相似的效果,具体取决于您在SELECT部分中添加的列数。