2015-04-06 41 views
0

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

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**它获取的声明后传递

+0

有一个看看这个:http://stackoverflow.com/a/11618722/1837329 –

+0

您正在使用什么数据库?时间和日期类型和功能在各种数据库之间有点不同。 – jpw

+0

@jpw这是在Java所以使用jdbc连接 –

回答

2

一个字符串,尝试DATEDIFF

注意:DATEDIFF不会给你一个'格式'。它只是返回一个整数。因此,您需要适当地投射/格式化。您可以使用108格式至CAST,以分钟/秒为单位。

例子:

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会给你一个数 那对应于两个日期之间的天数。

如果你想在几小时内得到结果,乘以24;如果是分钟,则将 乘以24 * 60等等。

您也可以将结果转换为INTERVAL。有两种类型的 间隔:NUMTODSINTERVAL(ENDDATE - STARTDATE, '天')或 NUMTOYMINTERVAL(ENDDATE - STARTDATE, '天')

Source

如果您正在使用Derby,有是一个TIMESTAMPDIFF

TIMESTAMPDIFF(间隔,timestampExpression1,timestampExpression2)

Apache official documentation

+1

OP没有使用MSSQL,所以这不是很有用。 – jpw

+0

我刚刚编辑了我的答案,包括Oracle。感谢您的评论 –

+1

但OP也没有使用Oracle,使用的数据库是Apache Derby。 – jpw