Sql 在oracle中使用datediff
我在Oracle中有一个如下表,接收和更新日期文件的数据类型是TimeStampSql 在oracle中使用datediff,sql,oracle,Sql,Oracle,我在Oracle中有一个如下表,接收和更新日期文件的数据类型是TimeStamp Stock No Receive Date Update Date 222 20-NOV-14 00.56.56.000000000 20-NOV-14 00.59.04.000000000 333 20-NOV-14 01.55.09.000000000 20-NOV-14 01.55.47.00000000
Stock No Receive Date Update Date
222 20-NOV-14 00.56.56.000000000 20-NOV-14 00.59.04.000000000
333 20-NOV-14 01.55.09.000000000 20-NOV-14 01.55.47.000000000
444 20-NOV-14 01.55.47.000000000 20-NOV-14 01.55.47.000000000
555 20-NOV-14 02.16.12.000000000 20-NOV-14 02.16.31.000000000
我想编写查询以获得结果,这些结果将只包含接收日期和更新日期之间的时间差超过一分钟
像
是否可以在Oracle中使用datediff函数来获得上述结果
select *
from the_table
where receive_date - update_date >= interval '1' minute;
这假设这两列实际上是时间戳
。因为只有这样,两个时间戳之间的差异才会产生一个间隔
如果需要不同的时间跨度,请使用不同的时间间隔:
select *
from the_table
where receive_date - update_date >= interval '30' second;
select *
from the_table
where receive_date - update_date >= interval '1' hour;
如果两列都定义为date
(在Oracle中也包括一个时间),则从另一列中减去一列的结果是一个整数,表示天数(分数)的差值
手册中的更多详细信息:
我将创建一个函数来返回差异,因为oracle中没有datediff。大概是这样的:
CREATE OR REPLACE FUNCTION datediff (options IN VARCHAR2,
p_d1 IN DATE,
p_d2 IN DATE)
RETURN NUMBER
AS
l_result NUMBER;
BEGIN
SELECT (p_d2 - p_d1)
* DECODE (UPPER (options),
'SS', 24 * 60 * 60,
'MI', 24 * 60,
'HH', 24,
NULL)
INTO l_result
FROM DUAL;
RETURN l_result;
END;
OPTIONS变量告诉函数我想要返回什么,因此ss=seconds,mi=minutes,hh=hour
然后,我会将原始查询更改为:
Select * from myTable where datediff ('ss', Receive_Date, Update_Date) >= 60
你想要什么格式的结果?小时、分钟、秒?类似于其中Abs(ReceiveDate-UpdateDate)>=1/1440
?我想要时间差大于一分钟的行,b/w接收日期和更新日期。我要库存号,只是不需要获取所有数据
Select * from myTable where datediff ('ss', Receive_Date, Update_Date) >= 60