diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/IntervalUtils.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/IntervalUtils.scala index 3f56d2f06f..13fb5b318a 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/IntervalUtils.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/IntervalUtils.scala @@ -987,15 +987,14 @@ object IntervalUtils { absMonths = -absMonths } val year = s"$sign${absMonths / MONTHS_PER_YEAR}" - val month = s"${absMonths % MONTHS_PER_YEAR}" - val yearAndMonth = s"$year-$month" + val yearAndMonth = s"$year-${absMonths % MONTHS_PER_YEAR}" style match { case ANSI_STYLE => val formatBuilder = new StringBuilder("INTERVAL '") if (startField == endField) { startField match { case YearMonthIntervalType.YEAR => formatBuilder.append(s"$year' YEAR") - case YearMonthIntervalType.MONTH => formatBuilder.append(s"$month' MONTH") + case YearMonthIntervalType.MONTH => formatBuilder.append(s"$months' MONTH") } } else { formatBuilder.append(s"$yearAndMonth' YEAR TO MONTH") diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/util/IntervalUtilsSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/util/IntervalUtilsSuite.scala index b6cf152401..8ec0bff0cd 100644 --- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/util/IntervalUtilsSuite.scala +++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/util/IntervalUtilsSuite.scala @@ -625,20 +625,20 @@ class IntervalUtilsSuite extends SparkFunSuite with SQLHelper { Seq( 0 -> ("INTERVAL '0-0' YEAR TO MONTH", "INTERVAL '0' YEAR", "INTERVAL '0' MONTH"), - -11 -> ("INTERVAL '-0-11' YEAR TO MONTH", "INTERVAL '-0' YEAR", "INTERVAL '11' MONTH"), + -11 -> ("INTERVAL '-0-11' YEAR TO MONTH", "INTERVAL '-0' YEAR", "INTERVAL '-11' MONTH"), 11 -> ("INTERVAL '0-11' YEAR TO MONTH", "INTERVAL '0' YEAR", "INTERVAL '11' MONTH"), - -13 -> ("INTERVAL '-1-1' YEAR TO MONTH", "INTERVAL '-1' YEAR", "INTERVAL '1' MONTH"), - 13 -> ("INTERVAL '1-1' YEAR TO MONTH", "INTERVAL '1' YEAR", "INTERVAL '1' MONTH"), - -24 -> ("INTERVAL '-2-0' YEAR TO MONTH", "INTERVAL '-2' YEAR", "INTERVAL '0' MONTH"), - 24 -> ("INTERVAL '2-0' YEAR TO MONTH", "INTERVAL '2' YEAR", "INTERVAL '0' MONTH"), + -13 -> ("INTERVAL '-1-1' YEAR TO MONTH", "INTERVAL '-1' YEAR", "INTERVAL '-13' MONTH"), + 13 -> ("INTERVAL '1-1' YEAR TO MONTH", "INTERVAL '1' YEAR", "INTERVAL '13' MONTH"), + -24 -> ("INTERVAL '-2-0' YEAR TO MONTH", "INTERVAL '-2' YEAR", "INTERVAL '-24' MONTH"), + 24 -> ("INTERVAL '2-0' YEAR TO MONTH", "INTERVAL '2' YEAR", "INTERVAL '24' MONTH"), Int.MinValue -> ("INTERVAL '-178956970-8' YEAR TO MONTH", "INTERVAL '-178956970' YEAR", - "INTERVAL '8' MONTH"), + "INTERVAL '-2147483648' MONTH"), Int.MaxValue -> ("INTERVAL '178956970-7' YEAR TO MONTH", "INTERVAL '178956970' YEAR", - "INTERVAL '7' MONTH") + "INTERVAL '2147483647' MONTH") ).foreach { case (months, (yearToMonth, year, month)) => assert(toYearMonthIntervalString(months, ANSI_STYLE, YEAR, MONTH) === yearToMonth) assert(toYearMonthIntervalString(months, ANSI_STYLE, YEAR, YEAR) === year)