2015-04-06 58 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