我在sql数据库上有两个日期时间值,我想减去它们并得到差异数小时。
到目前为止,我创造了三个值。 Deptime和ArrTime作为日期时间值,这是我的问题。
1)第三张表应该是什么价值?它可以是数字,因为我想用它来统计吗?
2)如何减去Deptime和Arrtime并将差异存储在FlightTime中?
提前致谢
答案 0 :(得分:3)
DATEDIFF可以为您提供时间。
SELECT DATEDIFF(HOUR, Deptime,Arrtime ) AS FlightTime FROM YourTable.
答案 1 :(得分:0)
如果您使用的是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函数的视图。
答案 2 :(得分:0)
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);
答案 3 :(得分:0)
您应该使用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')";