【问题标题】:How to subtract two sql datetime fields如何减去两个sql日期时间字段
【发布时间】:2015-04-23 13:54:07
【问题描述】:

我在 sql 数据库上有两个日期时间值,我想将它们相减并得到小时数的差异。

到目前为止,我已经创建了三个值。 Deptime 和 ArrTime 作为日期时间值,这是我的问题。

1) 第三张表应该是什么值?可以是数字,因为我想用它来统计吗?

2) 如何减去 Deptime 和 Arrtime 并将差值存储在 FlightTime 中?

提前致谢

【问题讨论】:

标签: php sql datetime


【解决方案1】:

DATEDIFF 可以为您提供时间。

SELECT DATEDIFF(HOUR, Deptime,Arrtime ) AS FlightTime FROM YourTable.

【讨论】:

  • 很可能是一个非常菜鸟的问题,但我会将此代码写入我的 phpmyadmin 内的 SQL 代码或我为 Web 应用程序编写的代码中?
  • 可能在您的网络应用程序中。特别是如果您计划多次执行此操作,请即时计算这些时间。 (嘿。飞。)
  • 据我了解,它是 SQL 的 MySQL 实现。所以DATEDIFF 会在天数内返回差异。
【解决方案2】:

如果您使用的是 tSQL,那么您可以使用 DATEDIFF 函数。您可以将此函数与小时一起使用,但如果您想要小时的分数,那么您可以使用分钟然后转换回小时。

小时的分数

SELECT CAST(DATEDIFF(MINUTE, Deptime,Arrtime) AS DECIMAL(30,10))/60 AS FlightTime
FROM TableName

整个小时

SELECT CAST(DATEDIFF(HOUR, Deptime,Arrtime)) AS FlightTime
FROM TableName

由于它是一个计算字段,我只需为计算字段创建一个带有 DATEDIFF 函数的视图。

【讨论】:

    【解决方案3】:

    PHP 有其自己的 DateInterval 例程,与在 SQL 中执行它相比,它可能会为您提供更多的灵活性(和可移植性)。

    $datetime1 = new DateTime($DepDate);
    $datetime2 = new DateTime($ArrDate);
    $FlightTime = $interval->format('%h');
    

    我正在查看您的进度并看到一些危险信号。由于您接受用户输入并将其插入数据库,you should 至少要使用prepared, parameterized insert statements

    $PiRepSubmissionSqlQuery = '
      INSERT INTO Pireps (
        PID, FLID, DEPID, ARRID, 
        FlightPlan, AircraftType, Fuel, 
        DepDate, ArrDate, FlightTime, 
        Remarks, Server
      ) 
      VALUES (
        ?, ?, ?, ?,
        ?, ?, ?,
        ?, ?, ?,
        ?, ? 
      )
    ';
    
    // This is just an example - don't forget to check for errors
    $sth = mysqli_prepare($mydb, $PiRepSubmissionSqlQuery);
    mysqli_stmt_bind_param(
      $sth, 
      'iiiisssssiss', // these should correspond to your SQL datatypes
      $PID, $FLID, $DEPID, $ARRID,
      $FlightPlan, $AircraftType, $Fuel,
      $DepDate, $ArrDate, $FlightTime,
      $Remarks, $Server
    );
    mysqli_stmt_execute($sth);
    

    【讨论】:

      【解决方案4】:

      您应该使用 mysql 函数 TIMESTAMPDIFF 来获取日期之间的差异。所以你的查询应该是这样的:

      $PiRepSubmissionSqlQuery = "INSERT INTO Pireps (PID, FLID, DEPID, ARRID, FlightPlan, AircraftType ,Fuel ,DepDate ,ArrDate, FlightTime  ,Remarks ,Server) 
                             VALUES ('$PID', '$FLID', '$DEPID', '$ARRID','$FlightPlan' ,'$AircraftType' ,'$Fuel','$DepDate' ,'$ArrDate' ,TIMESTAMPDIFF(HOUR, ArrDate, DepDate), '$Remarks' ,'$Server')";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-14
        • 1970-01-01
        • 2014-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多