比较 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')
如果您使用的是 Derby
,则有 TIMESTAMPDIFF
:
TIMESTAMPDIFF( interval, timestampExpression1, timestampExpression2 )
我想从我的数据库中获取两个不同时间列之间的最小和最大差异,但我不确定应该使用什么函数来执行此操作。我花了一些时间在网上查找,发现了一个叫做 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')
如果您使用的是 Derby
,则有 TIMESTAMPDIFF
:
TIMESTAMPDIFF( interval, timestampExpression1, timestampExpression2 )