> On March 26, 2015, 6:14 p.m., Mohit Sabharwal wrote: > > ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFMonthsBetween.java, > > line 50 > > <https://reviews.apache.org/r/32489/diff/2/?file=906532#file906532line50> > > > > Consider the example where date1 is 1997-02-28 and date2 is 1996-10-30. > > In this case the monBtw will be -8, i.e. negative, correct ? But the doc > > states it should be positive. > > > > Also, I don't see such a case addressed in the unit tests. > > > > Also, could you explain/add comment about why last day of the month is > > significant. Shouldn't we be computing denominator based on > > getAcutalMaximum of the two dates instead of a fixed "31" or is that the > > Oracle behaviour ? > > Alexander Pivovarov wrote: > date1 1997-02-28 is later than date2 1996-10-30 and the result is > positive (Hive: 3.93548387, Oracle: 3.93548) > > if we swap 1997-02-28 and 1996-10-30 than > date1 1996-10-30 is earlier than date2 1997-02-28 and the result is > negative (Hive: -3.93548387, Oracle: -3.93548) > > Oracle query: > select months_between('28-FEB-1997', '30-OCT-1996'), > months_between('30-OCT-1996','28-FEB-1997') from dual; > > Hive query: > select months_between('1997-02-28', '1996-10-30'), > months_between('1996-10-30','1997-02-28'); > > Oracle doc says that Oracle calculates the fractional portion of the > result based on a 31-day month. > > Found one bug. Oracle considers the difference in time components date1 > and date2 but Hive skips date1 and date2 time part. > e.g. > Oracle > select months_between(to_date('1997-02-28 10:30:00', 'YYYY-MM-DD > HH24:mi:ss'), '30-OCT-1996') from dual; > 3.9496 > > Hive: > select months_between('1997-02-28 10:30:00', '1996-10-30'); > OK > 3.93548387 > > I'll fix it.
actually oracle returns 3.94959677419354838709677419354838709677 for select cast(months_between(to_date('1997-02-28 10:30:00', 'YYYY-MM-DD HH24:mi:ss'), '30-OCT-1996') as varchar(100)) from dual; - Alexander ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/32489/#review77920 ----------------------------------------------------------- On March 26, 2015, 7:37 a.m., Alexander Pivovarov wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > https://reviews.apache.org/r/32489/ > ----------------------------------------------------------- > > (Updated March 26, 2015, 7:37 a.m.) > > > Review request for hive and Jason Dere. > > > Bugs: HIVE-9518 > https://issues.apache.org/jira/browse/HIVE-9518 > > > Repository: hive-git > > > Description > ------- > > HIVE-9518 Implement MONTHS_BETWEEN aligned with Oracle one > > > Diffs > ----- > > ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java > 2ba7adf2e6fc8a184c9d1619619dff2f0870528b > > ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFMonthsBetween.java > PRE-CREATION > > ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFMonthsBetween.java > PRE-CREATION > ql/src/test/queries/clientpositive/udf_months_between.q PRE-CREATION > ql/src/test/results/clientpositive/show_functions.q.out > 81abeb9be4fd47724be544c7bc8da8b25fcd6e75 > ql/src/test/results/clientpositive/udf_months_between.q.out PRE-CREATION > > Diff: https://reviews.apache.org/r/32489/diff/ > > > Testing > ------- > > > Thanks, > > Alexander Pivovarov > >