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

时间:2015-04-06 19:08:09

标签: sql time derby

我想从我的数据库中获取两个不同时间列之间的最小和最大差异,但我不确定我应该使用什么函数来执行此操作。我花了一些时间在线查找并发现了一些名为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连接,因此我尝试将此语句写入一个字符串,该字符串稍后将作为语句传递

1 个答案:

答案 0 :(得分:2)

如果您使用的是**SQL Server**,请尝试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,'DAY')或   NUMTOYMINTERVAL(ENDDATE - STARTDATE,'DAY')

Source

如果您使用的是 Derby ,则 TIMESTAMPDIFF

  

TIMESTAMPDIFF(interval,timestampExpression1,timestampExpression2)

Apache official documentation