将查询从Microsoft SQL转换为Oracle

时间:2018-04-24 12:17:16

标签: sql oracle oracle11g

以下Microsoft SQL查询比较表的两个日期字段,并返回分钟差异大于5的记录。

${batch}

我不知道如何用ORACLE写这个。我搜索了解决方案,我最接近的是:

SELECT  t.Id, t.date1, t.date2,
    DATEDIFF(MINUTE, t.date1 , t.date2) AS Mtime 
FROM table1 t 
WHERE 
DATEDIFF(MINUTE,t.date1, t.date2) > 5

给了我错误SELECT t.date1, t.date2, (t.date1 - t.date2) * 1440 AS Mtime FROM table1 t WHERE (t.date1 -t.date2) * 1440 > 5

有没有人知道如何使用ORACLE编写此查询?

2 个答案:

答案 0 :(得分:3)

不要使用这种差异。只需添加间隔:

WHERE t.DeliveryDate >= t.Deadline + interval '5' minute

或者:

WHERE t.DeliveryDate >= t.Deadline + 5 / (24 * 60)

SQL Server中的等价物是:

WHERE t.DeliveryDate >= DATEADD(minute, 5, t.Deadline)

这是一个好习惯。如果其中一个值是常量,则使用函数(-datediff())可以防止使用索引。

答案 1 :(得分:0)

这应该有效 -

SELECT  t.Id, t.date1, t.date2,
(CAST(t.date1 AS DATE)-CAST(t.date2 AS DATE)) * 1440 AS Mtime FROM table1 t where (CAST(t.date1 AS DATE)-CAST(t.date2 AS DATE)) * 1440 > 5