比较 sql 中的两种时间数据类型

Compare two time data types in sql

我想从我的数据库中获取两个不同时间列之间的最小和最大差异,但我不确定应该使用什么函数来执行此操作。我花了一些时间在网上查找,发现了一个叫做 timediff 的东西,我认为它可以工作,但显然它不存在。我应该使用什么功能来执行此声明?我尝试使用 timediff,但它不起作用,但应该可以帮助任何人理解我正在尝试做什么。

SELECT EMPLOYEEID, COUNT(ORDER_TYPE) AS TYPECOUNT,
MIN(TIMEDIFF(ORDER_ACCEPTED_TIME,ORDER_COMPLETION_TIME)) AS MINPREP,
MAX(TIMEDIFF(ORDER_ACCEPTED_TIME, ORDER_COMPLETION_TIME)) AS MAXPREP 
FROM ORDERS WHERE ORDERDATE BETWEEN '4/01/2015' AND '4/30/2015' AND ORDER_TYPE ='Breakfast' 
GROUP BY EMPLOYEEID

以上是我之前使用timediff方法尝试的语句,在我的程序中不起作用。此外,我在 java 中编写此代码并使用 jdbc 连接,因此我试图将此语句写入一个字符串,稍后作为语句传递给

如果您正在使用 **SQL Server**,请尝试 DATEDIFF

注意:DATEDIFF 不会给你 'format'。它只是 returns 一个整数。所以你需要 cast/format appropriately.You 可以使用 108 格式来 CAST 它来 minutes/seconds.

示例:

DECLARE @dt1 datetime
DECLARE @dt2 datetime
SELECT @dt1 = '20090316 12:00:00.000', @dt2 = GETDATE()

SELECT CONVERT(varchar(12), DATEADD(ms, DATEDIFF(ms, @dt1, @dt2), 0), 114)

如果您使用的是**Oracle**,则没有类似的功能,但是这里是如何使用的方法:

ENDDATE - STARTDATE will give you a number that corresponds to the number of days between the two dates.

If you want the result in hours, multiply by 24; if minutes, multiply by 24*60 and so forth.

You can also convert the result to an INTERVAL. There are two type of intervals: NUMTODSINTERVAL(ENDDATE - STARTDATE, 'DAY') or NUMTOYMINTERVAL(ENDDATE - STARTDATE, 'DAY')

Source

如果您使用的是 Derby,则有 TIMESTAMPDIFF:

TIMESTAMPDIFF( interval, timestampExpression1, timestampExpression2 )

Apache official documentation