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