diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/Cast.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/Cast.scala index 25e1889109e8d..8cd49b2374ad9 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/Cast.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/Cast.scala @@ -1803,7 +1803,6 @@ case class Cast( $evPrim = $util.durationToMicros($util.microsToDuration($c), (byte)${it.endField}); """ case x: IntegralType => - assert(it.startField == it.endField) val util = IntervalUtils.getClass.getCanonicalName.stripSuffix("$") if (x == LongType) { (c, evPrim, _) => @@ -1834,7 +1833,6 @@ case class Cast( $evPrim = $util.periodToMonths($util.monthsToPeriod($c), (byte)${it.endField}); """ case x: IntegralType => - assert(it.startField == it.endField) val util = IntervalUtils.getClass.getCanonicalName.stripSuffix("$") if (x == LongType) { (c, evPrim, _) => diff --git a/sql/core/src/test/resources/sql-tests/inputs/cast.sql b/sql/core/src/test/resources/sql-tests/inputs/cast.sql index 34102a1250780..fb92825c00113 100644 --- a/sql/core/src/test/resources/sql-tests/inputs/cast.sql +++ b/sql/core/src/test/resources/sql-tests/inputs/cast.sql @@ -120,9 +120,11 @@ select cast(interval '1000000' second as smallint); -- cast integrals to ANSI intervals select cast(1Y as interval year); select cast(-122S as interval year to month); +select cast(ym as interval year to month) from values(-122S) as t(ym); select cast(1000 as interval month); select cast(-10L as interval second); select cast(100Y as interval hour to second); +select cast(dt as interval hour to second) from values(100Y) as t(dt); select cast(-1000S as interval day to second); select cast(10 as interval day); diff --git a/sql/core/src/test/resources/sql-tests/results/ansi/cast.sql.out b/sql/core/src/test/resources/sql-tests/results/ansi/cast.sql.out index c4b454b135c9e..373e8c7b36232 100644 --- a/sql/core/src/test/resources/sql-tests/results/ansi/cast.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/ansi/cast.sql.out @@ -856,6 +856,14 @@ struct -10-2 +-- !query +select cast(ym as interval year to month) from values(-122S) as t(ym) +-- !query schema +struct +-- !query output +-10-2 + + -- !query select cast(1000 as interval month) -- !query schema @@ -880,6 +888,14 @@ struct 0 00:01:40.000000000 +-- !query +select cast(dt as interval hour to second) from values(100Y) as t(dt) +-- !query schema +struct +-- !query output +0 00:01:40.000000000 + + -- !query select cast(-1000S as interval day to second) -- !query schema diff --git a/sql/core/src/test/resources/sql-tests/results/cast.sql.out b/sql/core/src/test/resources/sql-tests/results/cast.sql.out index 2b976914bfe98..5e21604511271 100644 --- a/sql/core/src/test/resources/sql-tests/results/cast.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/cast.sql.out @@ -684,6 +684,14 @@ struct -10-2 +-- !query +select cast(ym as interval year to month) from values(-122S) as t(ym) +-- !query schema +struct +-- !query output +-10-2 + + -- !query select cast(1000 as interval month) -- !query schema @@ -708,6 +716,14 @@ struct 0 00:01:40.000000000 +-- !query +select cast(dt as interval hour to second) from values(100Y) as t(dt) +-- !query schema +struct +-- !query output +0 00:01:40.000000000 + + -- !query select cast(-1000S as interval day to second) -- !query schema