oracle

时间:2018-04-24 22:12:59

标签: sql sql-server oracle migration

我想使用Oracle,但DATEDIFF和DATEADD功能在Oracle DB中不起作用。

如何在Oracle中编写下面提到的代码?

datediff('QUARTER', pr.StartDate, SYSDATE)

datediff('MONTH', pr.StartDate, SYSDATE)

2 个答案:

答案 0 :(得分:0)

在这种情况下,最好的办法是使用Oracle的MONTHS_BETWEEN()函数。

而不是:

datediff('QUARTER', pr.StartDate, SYSDATE)
你会用:

MONTHS_BETWEEN(pr.startdate, SYSDATE) / 3

而不是:

datediff('MONTH', pr.StartDate, SYSDATE)
你会用:

MONTHS_BETWEEN(pr.startdate, SYSDATE)

请注意,MONTHS_BETWEEN()将返回几个月的分数,因此如果您需要整数,请使用TRUNC()ROUND()

当然,如果您需要几天而不是几个月,则可以简单地从另一个日期中减去一个日期,例如SYSDATE - pr.startdate,反之亦然。

如果您需要将日期添加到日期,您可以简单地执行以下操作:

pr.startdate + 1 -- where 1 is the number of days

如果您需要添加或减去月份,请使用ADD_MONTHS()函数 - 与INTERVAL不同,此函数在闰年中可以安全使用。

希望这有帮助。

答案 1 :(得分:0)

由于datediff()的语义,它们没有简单的精确等价物。它计算两个日期/时间之间的“边界”数量。

我相信这些在语义上是等价的:

trunc(months_between(trunc(pr.StartDate, 'Q'), trunc(sysdate, 'Q')) / 3)
months_between(trunc(pr.StartDate, 'MONTH'), trunc(sysdate, 'MONTH'))

由于截断到季度/月的第一天,这些不应该返回分数。