【问题标题】:Compare two time data types in sql比较sql中的两种时间数据类型
【发布时间】:2015-06-11 05:46:56
【问题描述】:

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

【问题讨论】:

  • 您使用的是什么数据库?不同数据库之间的时间和日期类型和函数略有不同。
  • @jpw 它在 java 中,所以使用 jdbc 连接
  • @NickKaraolis 但是您使用的是什么数据库引擎? MySQL、Oracle、MSSQL 还是其他?
  • @jpw 我正在使用 apache derby 作为引擎

标签: sql time derby


【解决方案1】:

如果您使用的是**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(间隔,timestampExpression1,timestampExpression2)

Apache official documentation

【讨论】:

  • OP 没有使用 MSSQL,所以这不是很有用。
  • 我刚刚编辑了我的答案以包括 Oracle。感谢您的评论
  • 但是OP也没有使用Oracle,使用的数据库是Apache Derby。
  • 包括德比示例
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-18
  • 2022-11-27
  • 1970-01-01
  • 2023-01-13
  • 2018-01-26
  • 2018-04-24
相关资源
最近更新 更多