如何在Oracle中使用具有YYYYMMDD格式的数字的datediff等价?

时间:2015-03-02 02:54:38

标签: sql oracle

我拥有number格式YYYYMMDD的Oracle数据库列。我没有成功地使用datediff格式来获取两个日期之间的差异。我在线阅读的documentation使用了不同的格式:

DATEDIFF(day,'2008-06-05','2008-08-05')

根据Oracle提供的格式,我最好的方式是获得两个日期之间的天数?只要获得格式为datediff的两个日期之间的天数,就可以接受不涉及YYYYMMDD的答案。

2 个答案:

答案 0 :(得分:3)

Oracle中的简单减法:

SELECT TO_DATE('20080805','YYYYMMDD') - TO_DATE('20080605','YYYYMMDD')
  FROM DUAL;

答案 1 :(得分:1)

Oracle没有DATEDIFF()功能。相反,您可以对Oracle日期使用简单算术,其中从另一个日期中减去一个日期会给出天数,并且您可以在此处添加从给定日期开始减去天数。 (您也可以减去天的分数,但这可能超出了这个答案的范围。)

要将格式NUMBER的{​​{1}}日期转换为实际日期,只需使用YYYYMMDD函数(我很确定Oracle会隐式转换TO_DATE()值在转换为日期之前转换为NUMBER;如果不是,请使用VARCHAR2明确地执行此操作。

TO_CHAR()

要获得两个日期之间的差异,您可以执行以下操作:

TO_DATE(20150301, 'YYYYMMDD')

顺便提一下,如果您想获得间隔而不是天数,请转换为时间戳(使用SELECT TO_DATE(my_number_date1, 'YYYYMMDD') - TO_DATE(my_number_date2, 'YYYYMMDD') FROM my_table; ),而不是转换为日期。