【问题标题】:Trying to find differences of hours between two dates in MySQL试图在 MySQL 中查找两个日期之间的小时差异
【发布时间】:2018-06-06 14:32:47
【问题描述】:

我一直在尝试学习一些 SQL,但我对这门语言感到很吃力。我试图从一张桌子上找出两个日期(出发和到达)之间的区别。其他地方已经声明使用 DATEDIFF,尽管我试图直接从表中提取数据,而不是手动键入日期。这是我尝试使用此功能的可怕尝试

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

我也试图找出超过 8 小时的时间差异,但老实说,我真的不知道我目前在做什么......我应该以什么方式来写这篇文章?

【问题讨论】:

  • 标记您正在使用的 DBMS(即MySQLSQL Server 等...)。
  • 您使用的 DBMS 存在一些依赖关系。所以请在你的问题中标记它。

标签: mysql datediff


【解决方案1】:

尝试使用此查询:

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

【讨论】:

  • 如果我想从表中提取数据,TIMESTAMPDIFF 和 DATEDIFF 的语法是什么? SELECT DATEDIFF(Difference wanted, tableColumn, tableColumn2) as HourDiff 做了什么
  • 您使用 MySQL 标记了问题,因此您可以忘记 SQL Server 的语法。我不知道我是否让你好起来,因为该方法的语法在 Internet 中有很好的记录。例如这里:w3resource.com/mysql/date-and-time-functions/…
  • 嗯,那好吧。我得到了想要的效果。谢谢!
【解决方案2】:

如果您在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 部分中添加的列数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    相关资源
    最近更新 更多