Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在oracle中使用datediff_Sql_Oracle - Fatal编程技术网

Sql 在oracle中使用datediff

Sql 在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

我在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.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