我想使用Oracle,但DATEDIFF和DATEADD功能在Oracle DB中不起作用。
如何在Oracle中编写下面提到的代码?
datediff('QUARTER', pr.StartDate, SYSDATE)
datediff('MONTH', pr.StartDate, SYSDATE)
答案 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'))
由于截断到季度/月的第一天,这些不应该返回分数。