From 618b249a9b6196efa375b3da04e96ad264191fb2 Mon Sep 17 00:00:00 2001 From: Max Gekk Date: Thu, 17 Aug 2023 14:05:07 +0300 Subject: [PATCH 1/9] Rename ToCharacter to NumberToCharacter --- .../catalyst/analysis/FunctionRegistry.scala | 4 +-- .../expressions/numberFormatExpressions.scala | 4 +-- .../expressions/StringExpressionsSuite.scala | 30 +++++++++---------- .../org/apache/spark/sql/functions.scala | 4 +-- 4 files changed, 21 insertions(+), 21 deletions(-) diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/FunctionRegistry.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/FunctionRegistry.scala index 558579cdb80ac..11ef225208114 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/FunctionRegistry.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/FunctionRegistry.scala @@ -530,8 +530,8 @@ object FunctionRegistry { expression[FormatString]("format_string"), expression[ToNumber]("to_number"), expression[TryToNumber]("try_to_number"), - expression[ToCharacter]("to_char"), - expression[ToCharacter]("to_varchar", setAlias = true, Some("3.5.0")), + expression[NumberToCharacter]("to_char"), + expression[NumberToCharacter]("to_varchar", setAlias = true, Some("3.5.0")), expression[GetJsonObject]("get_json_object"), expression[InitCap]("initcap"), expression[StringInstr]("instr"), diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/numberFormatExpressions.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/numberFormatExpressions.scala index 2d4f0438db760..a8c4cfd1bc7ac 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/numberFormatExpressions.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/numberFormatExpressions.scala @@ -222,7 +222,7 @@ case class TryToNumber(left: Expression, right: Expression) """, since = "3.4.0", group = "string_funcs") -case class ToCharacter(left: Expression, right: Expression) +case class NumberToCharacter(left: Expression, right: Expression) extends BinaryExpression with ImplicitCastInputTypes with NullIntolerant { private lazy val numberFormatter = { val value = right.eval() @@ -278,6 +278,6 @@ case class ToCharacter(left: Expression, right: Expression) ev.copy(code = stripped) } override protected def withNewChildrenInternal( - newLeft: Expression, newRight: Expression): ToCharacter = + newLeft: Expression, newRight: Expression): NumberToCharacter = copy(left = newLeft, right = newRight) } diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/StringExpressionsSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/StringExpressionsSuite.scala index 006c4a7805688..5239fd79b307c 100644 --- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/StringExpressionsSuite.scala +++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/StringExpressionsSuite.scala @@ -1397,7 +1397,7 @@ class StringExpressionsSuite extends SparkFunSuite with ExpressionEvalHelper { s"The format string should have been invalid: $format") assert(tryToNumberResult == invalidFormat) - val toCharResult = ToCharacter(Decimal(456), Literal(format)).checkInputDataTypes() + val toCharResult = NumberToCharacter(Decimal(456), Literal(format)).checkInputDataTypes() assert(toCharResult != TypeCheckResult.TypeCheckSuccess, s"The format string should have been invalid: $format") assert(toCharResult == invalidFormat) @@ -1406,7 +1406,7 @@ class StringExpressionsSuite extends SparkFunSuite with ExpressionEvalHelper { test("ToCharacter: fails analysis if numberFormat is not foldable") { val right = AttributeReference("a", StringType)() - val toCharacterExpr = ToCharacter(Decimal(456), right) + val toCharacterExpr = NumberToCharacter(Decimal(456), right) assert(toCharacterExpr.checkInputDataTypes() == DataTypeMismatch( errorSubClass = "NON_FOLDABLE_INPUT", @@ -1421,7 +1421,7 @@ class StringExpressionsSuite extends SparkFunSuite with ExpressionEvalHelper { test("SPARK-41452: ToCharacter: null format string") { // if null format, to_number should return null - val toCharacterExpr = ToCharacter(Literal(Decimal(454)), Literal(null, StringType)) + val toCharacterExpr = NumberToCharacter(Literal(Decimal(454)), Literal(null, StringType)) assert(toCharacterExpr.checkInputDataTypes() == TypeCheckResult.TypeCheckSuccess) checkEvaluation(toCharacterExpr, null) } @@ -1539,7 +1539,7 @@ class StringExpressionsSuite extends SparkFunSuite with ExpressionEvalHelper { "00000") -> "00454" ).foreach { case ((decimal, format), expected) => - var expr: Expression = ToCharacter(Literal(decimal), Literal(format)) + var expr: Expression = NumberToCharacter(Literal(decimal), Literal(format)) assert(expr.checkInputDataTypes() == TypeCheckResult.TypeCheckSuccess) checkEvaluation(expr, expected) } @@ -1569,11 +1569,11 @@ class StringExpressionsSuite extends SparkFunSuite with ExpressionEvalHelper { "4542 " ).foreach { case ((decimal, format), expected) => val format2 = format.replace('.', 'D') - var expr: Expression = ToCharacter(Literal(decimal), Literal(format)) + var expr: Expression = NumberToCharacter(Literal(decimal), Literal(format)) assert(expr.checkInputDataTypes() == TypeCheckResult.TypeCheckSuccess) checkEvaluation(expr, expected) - expr = ToCharacter(Literal(decimal), Literal(format2)) + expr = NumberToCharacter(Literal(decimal), Literal(format2)) assert(expr.checkInputDataTypes() == TypeCheckResult.TypeCheckSuccess) checkEvaluation(expr, expected) } @@ -1599,7 +1599,7 @@ class StringExpressionsSuite extends SparkFunSuite with ExpressionEvalHelper { "99999.") -> " 4542 " ).foreach { case ((decimal, format), expected) => - var expr: Expression = ToCharacter(Literal(decimal), Literal(format)) + var expr: Expression = NumberToCharacter(Literal(decimal), Literal(format)) assert(expr.checkInputDataTypes() == TypeCheckResult.TypeCheckSuccess) checkEvaluation(expr, expected) } @@ -1626,11 +1626,11 @@ class StringExpressionsSuite extends SparkFunSuite with ExpressionEvalHelper { "12,454,367" ).foreach { case ((decimal, format), expected) => val format2 = format.replace(',', 'G') - var expr: Expression = ToCharacter(Literal(decimal), Literal(format)) + var expr: Expression = NumberToCharacter(Literal(decimal), Literal(format)) assert(expr.checkInputDataTypes() == TypeCheckResult.TypeCheckSuccess) checkEvaluation(expr, expected) - expr = ToCharacter(Literal(decimal), Literal(format2)) + expr = NumberToCharacter(Literal(decimal), Literal(format2)) assert(expr.checkInputDataTypes() == TypeCheckResult.TypeCheckSuccess) checkEvaluation(expr, expected) } @@ -1682,7 +1682,7 @@ class StringExpressionsSuite extends SparkFunSuite with ExpressionEvalHelper { "999,999") -> " 12,454" ).foreach { case ((decimal, format), expected) => - var expr: Expression = ToCharacter(Literal(decimal), Literal(format)) + var expr: Expression = NumberToCharacter(Literal(decimal), Literal(format)) assert(expr.checkInputDataTypes() == TypeCheckResult.TypeCheckSuccess) checkEvaluation(expr, expected) } @@ -1696,7 +1696,7 @@ class StringExpressionsSuite extends SparkFunSuite with ExpressionEvalHelper { "$00.00") -> "$78.12" ).foreach { case ((decimal, format), expected) => - var expr: Expression = ToCharacter(Literal(decimal), Literal(format)) + var expr: Expression = NumberToCharacter(Literal(decimal), Literal(format)) assert(expr.checkInputDataTypes() == TypeCheckResult.TypeCheckSuccess) checkEvaluation(expr, expected) } @@ -1731,7 +1731,7 @@ class StringExpressionsSuite extends SparkFunSuite with ExpressionEvalHelper { "99999999999.9999999S") -> " 83028485.0000000-" ).foreach { case ((decimal, format), expected) => - var expr: Expression = ToCharacter(Literal(decimal), Literal(format)) + var expr: Expression = NumberToCharacter(Literal(decimal), Literal(format)) assert(expr.checkInputDataTypes() == TypeCheckResult.TypeCheckSuccess) checkEvaluation(expr, expected) } @@ -1763,7 +1763,7 @@ class StringExpressionsSuite extends SparkFunSuite with ExpressionEvalHelper { "MI9999999999999999.999999999999999") -> " -4.310000000000000" ).foreach { case ((decimal, format), expected) => - var expr: Expression = ToCharacter(Literal(decimal), Literal(format)) + var expr: Expression = NumberToCharacter(Literal(decimal), Literal(format)) assert(expr.checkInputDataTypes() == TypeCheckResult.TypeCheckSuccess) checkEvaluation(expr, expected) } @@ -1798,7 +1798,7 @@ class StringExpressionsSuite extends SparkFunSuite with ExpressionEvalHelper { "99G999D9PR") -> "<12,454.8>" ).foreach { case ((decimal, format), expected) => - var expr: Expression = ToCharacter(Literal(decimal), Literal(format)) + var expr: Expression = NumberToCharacter(Literal(decimal), Literal(format)) assert(expr.checkInputDataTypes() == TypeCheckResult.TypeCheckSuccess) checkEvaluation(expr, expected) } @@ -1820,7 +1820,7 @@ class StringExpressionsSuite extends SparkFunSuite with ExpressionEvalHelper { "99.9") -> "##.#" ).foreach { case ((decimal, format), expected) => - var expr: Expression = ToCharacter(Literal(decimal), Literal(format)) + var expr: Expression = NumberToCharacter(Literal(decimal), Literal(format)) assert(expr.checkInputDataTypes() == TypeCheckResult.TypeCheckSuccess) checkEvaluation(expr, expected) } diff --git a/sql/core/src/main/scala/org/apache/spark/sql/functions.scala b/sql/core/src/main/scala/org/apache/spark/sql/functions.scala index e7e8b945d9186..8171c0a74d0c6 100644 --- a/sql/core/src/main/scala/org/apache/spark/sql/functions.scala +++ b/sql/core/src/main/scala/org/apache/spark/sql/functions.scala @@ -4406,7 +4406,7 @@ object functions { * @since 3.5.0 */ def to_char(e: Column, format: Column): Column = withExpr { - ToCharacter(e.expr, format.expr) + NumberToCharacter(e.expr, format.expr) } /** @@ -4434,7 +4434,7 @@ object functions { * @since 3.5.0 */ def to_varchar(e: Column, format: Column): Column = withExpr { - ToCharacter(e.expr, format.expr) + NumberToCharacter(e.expr, format.expr) } /** From 4173bedf077458612fb837e4aec4c3dd1721f1e9 Mon Sep 17 00:00:00 2001 From: Max Gekk Date: Thu, 17 Aug 2023 14:18:34 +0300 Subject: [PATCH 2/9] ToCharacter extends ExpressionBuilder --- .../expressions/numberFormatExpressions.scala | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/numberFormatExpressions.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/numberFormatExpressions.scala index a8c4cfd1bc7ac..fcd4355f2b148 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/numberFormatExpressions.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/numberFormatExpressions.scala @@ -19,13 +19,14 @@ package org.apache.spark.sql.catalyst.expressions import java.util.Locale -import org.apache.spark.sql.catalyst.analysis.TypeCheckResult +import org.apache.spark.sql.catalyst.analysis.{ExpressionBuilder, TypeCheckResult} import org.apache.spark.sql.catalyst.analysis.TypeCheckResult.DataTypeMismatch import org.apache.spark.sql.catalyst.expressions.Cast._ -import org.apache.spark.sql.catalyst.expressions.codegen.{CodegenContext, CodeGenerator, ExprCode} +import org.apache.spark.sql.catalyst.expressions.codegen.{CodeGenerator, CodegenContext, ExprCode} import org.apache.spark.sql.catalyst.expressions.codegen.Block.BlockHelper import org.apache.spark.sql.catalyst.util.ToNumberParser -import org.apache.spark.sql.types.{AbstractDataType, DataType, Decimal, DecimalType, StringType} +import org.apache.spark.sql.errors.QueryCompilationErrors +import org.apache.spark.sql.types.{AbstractDataType, DataType, DatetimeType, Decimal, DecimalType, StringType} import org.apache.spark.unsafe.types.UTF8String abstract class ToNumberBase(left: Expression, right: Expression, errorOnFail: Boolean) @@ -222,6 +223,21 @@ case class TryToNumber(left: Expression, right: Expression) """, since = "3.4.0", group = "string_funcs") +object ToCharacter extends ExpressionBuilder { + override def build(funcName: String, expressions: Seq[Expression]): Expression = { + val numArgs = expressions.length + if (expressions.length == 2) { + val inputExpr = expressions.head + inputExpr.dataType match { + case _: DatetimeType => DateFormatClass(inputExpr, expressions(1)) + case _ => NumberToCharacter(inputExpr, expressions(1)) + } + } else { + throw QueryCompilationErrors.wrongNumArgsError(funcName, Seq(2), numArgs) + } + } +} + case class NumberToCharacter(left: Expression, right: Expression) extends BinaryExpression with ImplicitCastInputTypes with NullIntolerant { private lazy val numberFormatter = { From 2e414ffd86c197a65a39d7158a15d841952ae93d Mon Sep 17 00:00:00 2001 From: Max Gekk Date: Thu, 17 Aug 2023 14:34:16 +0300 Subject: [PATCH 3/9] Use expressionBuilder --- .../spark/sql/catalyst/analysis/FunctionRegistry.scala | 4 ++-- .../src/main/scala/org/apache/spark/sql/functions.scala | 8 ++------ 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/FunctionRegistry.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/FunctionRegistry.scala index 11ef225208114..9410160ff3d65 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/FunctionRegistry.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/FunctionRegistry.scala @@ -530,8 +530,8 @@ object FunctionRegistry { expression[FormatString]("format_string"), expression[ToNumber]("to_number"), expression[TryToNumber]("try_to_number"), - expression[NumberToCharacter]("to_char"), - expression[NumberToCharacter]("to_varchar", setAlias = true, Some("3.5.0")), + expressionBuilder("to_char", ToCharacter), + expressionBuilder("to_varchar", ToCharacter, setAlias = true, Some("3.5.0")), expression[GetJsonObject]("get_json_object"), expression[InitCap]("initcap"), expression[StringInstr]("instr"), diff --git a/sql/core/src/main/scala/org/apache/spark/sql/functions.scala b/sql/core/src/main/scala/org/apache/spark/sql/functions.scala index 8171c0a74d0c6..679b211ee6bde 100644 --- a/sql/core/src/main/scala/org/apache/spark/sql/functions.scala +++ b/sql/core/src/main/scala/org/apache/spark/sql/functions.scala @@ -4405,9 +4405,7 @@ object functions { * @group string_funcs * @since 3.5.0 */ - def to_char(e: Column, format: Column): Column = withExpr { - NumberToCharacter(e.expr, format.expr) - } + def to_char(e: Column, format: Column): Column = call_function("to_char", e, format) /** * Convert `e` to a string based on the `format`. @@ -4433,9 +4431,7 @@ object functions { * @group string_funcs * @since 3.5.0 */ - def to_varchar(e: Column, format: Column): Column = withExpr { - NumberToCharacter(e.expr, format.expr) - } + def to_varchar(e: Column, format: Column): Column = to_char(e, format) /** * Convert string 'e' to a number based on the string format 'format'. From 1705eb3034e0d9af8a6a20f5d95f546f081a0823 Mon Sep 17 00:00:00 2001 From: Max Gekk Date: Thu, 17 Aug 2023 14:35:25 +0300 Subject: [PATCH 4/9] ToCharacter -> ToCharacterBuilder --- .../apache/spark/sql/catalyst/analysis/FunctionRegistry.scala | 4 ++-- .../sql/catalyst/expressions/numberFormatExpressions.scala | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/FunctionRegistry.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/FunctionRegistry.scala index 9410160ff3d65..5c0c7396a8511 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/FunctionRegistry.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/FunctionRegistry.scala @@ -530,8 +530,8 @@ object FunctionRegistry { expression[FormatString]("format_string"), expression[ToNumber]("to_number"), expression[TryToNumber]("try_to_number"), - expressionBuilder("to_char", ToCharacter), - expressionBuilder("to_varchar", ToCharacter, setAlias = true, Some("3.5.0")), + expressionBuilder("to_char", ToCharacterBuilder), + expressionBuilder("to_varchar", ToCharacterBuilder, setAlias = true, Some("3.5.0")), expression[GetJsonObject]("get_json_object"), expression[InitCap]("initcap"), expression[StringInstr]("instr"), diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/numberFormatExpressions.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/numberFormatExpressions.scala index fcd4355f2b148..3787f8caea363 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/numberFormatExpressions.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/numberFormatExpressions.scala @@ -223,7 +223,7 @@ case class TryToNumber(left: Expression, right: Expression) """, since = "3.4.0", group = "string_funcs") -object ToCharacter extends ExpressionBuilder { +object ToCharacterBuilder extends ExpressionBuilder { override def build(funcName: String, expressions: Seq[Expression]): Expression = { val numArgs = expressions.length if (expressions.length == 2) { From a862579876368fe22384b98cab4ce5f3398805ce Mon Sep 17 00:00:00 2001 From: Max Gekk Date: Thu, 17 Aug 2023 14:36:30 +0300 Subject: [PATCH 5/9] NumberToCharacter -> ToCharacter --- .../expressions/numberFormatExpressions.scala | 6 ++-- .../expressions/StringExpressionsSuite.scala | 30 +++++++++---------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/numberFormatExpressions.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/numberFormatExpressions.scala index 3787f8caea363..b17f5a994b052 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/numberFormatExpressions.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/numberFormatExpressions.scala @@ -230,7 +230,7 @@ object ToCharacterBuilder extends ExpressionBuilder { val inputExpr = expressions.head inputExpr.dataType match { case _: DatetimeType => DateFormatClass(inputExpr, expressions(1)) - case _ => NumberToCharacter(inputExpr, expressions(1)) + case _ => ToCharacter(inputExpr, expressions(1)) } } else { throw QueryCompilationErrors.wrongNumArgsError(funcName, Seq(2), numArgs) @@ -238,7 +238,7 @@ object ToCharacterBuilder extends ExpressionBuilder { } } -case class NumberToCharacter(left: Expression, right: Expression) +case class ToCharacter(left: Expression, right: Expression) extends BinaryExpression with ImplicitCastInputTypes with NullIntolerant { private lazy val numberFormatter = { val value = right.eval() @@ -294,6 +294,6 @@ case class NumberToCharacter(left: Expression, right: Expression) ev.copy(code = stripped) } override protected def withNewChildrenInternal( - newLeft: Expression, newRight: Expression): NumberToCharacter = + newLeft: Expression, newRight: Expression): ToCharacter = copy(left = newLeft, right = newRight) } diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/StringExpressionsSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/StringExpressionsSuite.scala index 5239fd79b307c..006c4a7805688 100644 --- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/StringExpressionsSuite.scala +++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/StringExpressionsSuite.scala @@ -1397,7 +1397,7 @@ class StringExpressionsSuite extends SparkFunSuite with ExpressionEvalHelper { s"The format string should have been invalid: $format") assert(tryToNumberResult == invalidFormat) - val toCharResult = NumberToCharacter(Decimal(456), Literal(format)).checkInputDataTypes() + val toCharResult = ToCharacter(Decimal(456), Literal(format)).checkInputDataTypes() assert(toCharResult != TypeCheckResult.TypeCheckSuccess, s"The format string should have been invalid: $format") assert(toCharResult == invalidFormat) @@ -1406,7 +1406,7 @@ class StringExpressionsSuite extends SparkFunSuite with ExpressionEvalHelper { test("ToCharacter: fails analysis if numberFormat is not foldable") { val right = AttributeReference("a", StringType)() - val toCharacterExpr = NumberToCharacter(Decimal(456), right) + val toCharacterExpr = ToCharacter(Decimal(456), right) assert(toCharacterExpr.checkInputDataTypes() == DataTypeMismatch( errorSubClass = "NON_FOLDABLE_INPUT", @@ -1421,7 +1421,7 @@ class StringExpressionsSuite extends SparkFunSuite with ExpressionEvalHelper { test("SPARK-41452: ToCharacter: null format string") { // if null format, to_number should return null - val toCharacterExpr = NumberToCharacter(Literal(Decimal(454)), Literal(null, StringType)) + val toCharacterExpr = ToCharacter(Literal(Decimal(454)), Literal(null, StringType)) assert(toCharacterExpr.checkInputDataTypes() == TypeCheckResult.TypeCheckSuccess) checkEvaluation(toCharacterExpr, null) } @@ -1539,7 +1539,7 @@ class StringExpressionsSuite extends SparkFunSuite with ExpressionEvalHelper { "00000") -> "00454" ).foreach { case ((decimal, format), expected) => - var expr: Expression = NumberToCharacter(Literal(decimal), Literal(format)) + var expr: Expression = ToCharacter(Literal(decimal), Literal(format)) assert(expr.checkInputDataTypes() == TypeCheckResult.TypeCheckSuccess) checkEvaluation(expr, expected) } @@ -1569,11 +1569,11 @@ class StringExpressionsSuite extends SparkFunSuite with ExpressionEvalHelper { "4542 " ).foreach { case ((decimal, format), expected) => val format2 = format.replace('.', 'D') - var expr: Expression = NumberToCharacter(Literal(decimal), Literal(format)) + var expr: Expression = ToCharacter(Literal(decimal), Literal(format)) assert(expr.checkInputDataTypes() == TypeCheckResult.TypeCheckSuccess) checkEvaluation(expr, expected) - expr = NumberToCharacter(Literal(decimal), Literal(format2)) + expr = ToCharacter(Literal(decimal), Literal(format2)) assert(expr.checkInputDataTypes() == TypeCheckResult.TypeCheckSuccess) checkEvaluation(expr, expected) } @@ -1599,7 +1599,7 @@ class StringExpressionsSuite extends SparkFunSuite with ExpressionEvalHelper { "99999.") -> " 4542 " ).foreach { case ((decimal, format), expected) => - var expr: Expression = NumberToCharacter(Literal(decimal), Literal(format)) + var expr: Expression = ToCharacter(Literal(decimal), Literal(format)) assert(expr.checkInputDataTypes() == TypeCheckResult.TypeCheckSuccess) checkEvaluation(expr, expected) } @@ -1626,11 +1626,11 @@ class StringExpressionsSuite extends SparkFunSuite with ExpressionEvalHelper { "12,454,367" ).foreach { case ((decimal, format), expected) => val format2 = format.replace(',', 'G') - var expr: Expression = NumberToCharacter(Literal(decimal), Literal(format)) + var expr: Expression = ToCharacter(Literal(decimal), Literal(format)) assert(expr.checkInputDataTypes() == TypeCheckResult.TypeCheckSuccess) checkEvaluation(expr, expected) - expr = NumberToCharacter(Literal(decimal), Literal(format2)) + expr = ToCharacter(Literal(decimal), Literal(format2)) assert(expr.checkInputDataTypes() == TypeCheckResult.TypeCheckSuccess) checkEvaluation(expr, expected) } @@ -1682,7 +1682,7 @@ class StringExpressionsSuite extends SparkFunSuite with ExpressionEvalHelper { "999,999") -> " 12,454" ).foreach { case ((decimal, format), expected) => - var expr: Expression = NumberToCharacter(Literal(decimal), Literal(format)) + var expr: Expression = ToCharacter(Literal(decimal), Literal(format)) assert(expr.checkInputDataTypes() == TypeCheckResult.TypeCheckSuccess) checkEvaluation(expr, expected) } @@ -1696,7 +1696,7 @@ class StringExpressionsSuite extends SparkFunSuite with ExpressionEvalHelper { "$00.00") -> "$78.12" ).foreach { case ((decimal, format), expected) => - var expr: Expression = NumberToCharacter(Literal(decimal), Literal(format)) + var expr: Expression = ToCharacter(Literal(decimal), Literal(format)) assert(expr.checkInputDataTypes() == TypeCheckResult.TypeCheckSuccess) checkEvaluation(expr, expected) } @@ -1731,7 +1731,7 @@ class StringExpressionsSuite extends SparkFunSuite with ExpressionEvalHelper { "99999999999.9999999S") -> " 83028485.0000000-" ).foreach { case ((decimal, format), expected) => - var expr: Expression = NumberToCharacter(Literal(decimal), Literal(format)) + var expr: Expression = ToCharacter(Literal(decimal), Literal(format)) assert(expr.checkInputDataTypes() == TypeCheckResult.TypeCheckSuccess) checkEvaluation(expr, expected) } @@ -1763,7 +1763,7 @@ class StringExpressionsSuite extends SparkFunSuite with ExpressionEvalHelper { "MI9999999999999999.999999999999999") -> " -4.310000000000000" ).foreach { case ((decimal, format), expected) => - var expr: Expression = NumberToCharacter(Literal(decimal), Literal(format)) + var expr: Expression = ToCharacter(Literal(decimal), Literal(format)) assert(expr.checkInputDataTypes() == TypeCheckResult.TypeCheckSuccess) checkEvaluation(expr, expected) } @@ -1798,7 +1798,7 @@ class StringExpressionsSuite extends SparkFunSuite with ExpressionEvalHelper { "99G999D9PR") -> "<12,454.8>" ).foreach { case ((decimal, format), expected) => - var expr: Expression = NumberToCharacter(Literal(decimal), Literal(format)) + var expr: Expression = ToCharacter(Literal(decimal), Literal(format)) assert(expr.checkInputDataTypes() == TypeCheckResult.TypeCheckSuccess) checkEvaluation(expr, expected) } @@ -1820,7 +1820,7 @@ class StringExpressionsSuite extends SparkFunSuite with ExpressionEvalHelper { "99.9") -> "##.#" ).foreach { case ((decimal, format), expected) => - var expr: Expression = NumberToCharacter(Literal(decimal), Literal(format)) + var expr: Expression = ToCharacter(Literal(decimal), Literal(format)) assert(expr.checkInputDataTypes() == TypeCheckResult.TypeCheckSuccess) checkEvaluation(expr, expected) } From ba3553a5e841e8924994b0701d7f12259242826e Mon Sep 17 00:00:00 2001 From: Max Gekk Date: Thu, 17 Aug 2023 14:51:48 +0300 Subject: [PATCH 6/9] fix coding style --- .../sql/catalyst/expressions/numberFormatExpressions.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/numberFormatExpressions.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/numberFormatExpressions.scala index b17f5a994b052..c955688574f2a 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/numberFormatExpressions.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/numberFormatExpressions.scala @@ -22,7 +22,7 @@ import java.util.Locale import org.apache.spark.sql.catalyst.analysis.{ExpressionBuilder, TypeCheckResult} import org.apache.spark.sql.catalyst.analysis.TypeCheckResult.DataTypeMismatch import org.apache.spark.sql.catalyst.expressions.Cast._ -import org.apache.spark.sql.catalyst.expressions.codegen.{CodeGenerator, CodegenContext, ExprCode} +import org.apache.spark.sql.catalyst.expressions.codegen.{CodegenContext, CodeGenerator, ExprCode} import org.apache.spark.sql.catalyst.expressions.codegen.Block.BlockHelper import org.apache.spark.sql.catalyst.util.ToNumberParser import org.apache.spark.sql.errors.QueryCompilationErrors From 2dffd5fcced1484f3d2fb0e5d09214ad73e8ccc1 Mon Sep 17 00:00:00 2001 From: Max Gekk Date: Thu, 17 Aug 2023 20:32:18 +0300 Subject: [PATCH 7/9] Add tests to datetime-formatting.sql --- .../datetime-formatting.sql.out | 118 ++-- .../sql-tests/inputs/datetime-formatting.sql | 60 +- .../results/datetime-formatting.sql.out | 526 +++++++++--------- 3 files changed, 352 insertions(+), 352 deletions(-) diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/datetime-formatting.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/datetime-formatting.sql.out index 376f007233552..1135b0f500e4d 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/datetime-formatting.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/datetime-formatting.sql.out @@ -23,9 +23,9 @@ CreateViewCommand `v`, select col from values -- !query -select col, date_format(col, 'G GG GGG GGGG') from v +select col, date_format(col, 'G GG GGG GGGG'), to_char(col, 'G GG GGG GGGG') from v -- !query analysis -Project [col#x, date_format(col#x, G GG GGG GGGG, Some(America/Los_Angeles)) AS date_format(col, G GG GGG GGGG)#x] +Project [col#x, date_format(col#x, G GG GGG GGGG, Some(America/Los_Angeles)) AS date_format(col, G GG GGG GGGG)#x, date_format(col#x, G GG GGG GGGG, Some(America/Los_Angeles)) AS date_format(col, G GG GGG GGGG)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -35,9 +35,9 @@ Project [col#x, date_format(col#x, G GG GGG GGGG, Some(America/Los_Angeles)) AS -- !query -select col, date_format(col, 'y yy yyy yyyy yyyyy yyyyyy') from v +select col, date_format(col, 'y yy yyy yyyy yyyyy yyyyyy'), to_char(col, 'y yy yyy yyyy yyyyy yyyyyy') from v -- !query analysis -Project [col#x, date_format(col#x, y yy yyy yyyy yyyyy yyyyyy, Some(America/Los_Angeles)) AS date_format(col, y yy yyy yyyy yyyyy yyyyyy)#x] +Project [col#x, date_format(col#x, y yy yyy yyyy yyyyy yyyyyy, Some(America/Los_Angeles)) AS date_format(col, y yy yyy yyyy yyyyy yyyyyy)#x, date_format(col#x, y yy yyy yyyy yyyyy yyyyyy, Some(America/Los_Angeles)) AS date_format(col, y yy yyy yyyy yyyyy yyyyyy)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -47,9 +47,9 @@ Project [col#x, date_format(col#x, y yy yyy yyyy yyyyy yyyyyy, Some(America/Los_ -- !query -select col, date_format(col, 'q qq') from v +select col, date_format(col, 'q qq'), to_char(col, 'q qq') from v -- !query analysis -Project [col#x, date_format(col#x, q qq, Some(America/Los_Angeles)) AS date_format(col, q qq)#x] +Project [col#x, date_format(col#x, q qq, Some(America/Los_Angeles)) AS date_format(col, q qq)#x, date_format(col#x, q qq, Some(America/Los_Angeles)) AS date_format(col, q qq)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -59,9 +59,9 @@ Project [col#x, date_format(col#x, q qq, Some(America/Los_Angeles)) AS date_form -- !query -select col, date_format(col, 'Q QQ QQQ QQQQ') from v +select col, date_format(col, 'Q QQ QQQ QQQQ'), to_char(col, 'Q QQ QQQ QQQQ') from v -- !query analysis -Project [col#x, date_format(col#x, Q QQ QQQ QQQQ, Some(America/Los_Angeles)) AS date_format(col, Q QQ QQQ QQQQ)#x] +Project [col#x, date_format(col#x, Q QQ QQQ QQQQ, Some(America/Los_Angeles)) AS date_format(col, Q QQ QQQ QQQQ)#x, date_format(col#x, Q QQ QQQ QQQQ, Some(America/Los_Angeles)) AS date_format(col, Q QQ QQQ QQQQ)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -71,9 +71,9 @@ Project [col#x, date_format(col#x, Q QQ QQQ QQQQ, Some(America/Los_Angeles)) AS -- !query -select col, date_format(col, 'M MM MMM MMMM') from v +select col, date_format(col, 'M MM MMM MMMM'), to_char(col, 'M MM MMM MMMM') from v -- !query analysis -Project [col#x, date_format(col#x, M MM MMM MMMM, Some(America/Los_Angeles)) AS date_format(col, M MM MMM MMMM)#x] +Project [col#x, date_format(col#x, M MM MMM MMMM, Some(America/Los_Angeles)) AS date_format(col, M MM MMM MMMM)#x, date_format(col#x, M MM MMM MMMM, Some(America/Los_Angeles)) AS date_format(col, M MM MMM MMMM)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -83,9 +83,9 @@ Project [col#x, date_format(col#x, M MM MMM MMMM, Some(America/Los_Angeles)) AS -- !query -select col, date_format(col, 'L LL') from v +select col, date_format(col, 'L LL'), to_char(col, 'L LL') from v -- !query analysis -Project [col#x, date_format(col#x, L LL, Some(America/Los_Angeles)) AS date_format(col, L LL)#x] +Project [col#x, date_format(col#x, L LL, Some(America/Los_Angeles)) AS date_format(col, L LL)#x, date_format(col#x, L LL, Some(America/Los_Angeles)) AS date_format(col, L LL)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -95,9 +95,9 @@ Project [col#x, date_format(col#x, L LL, Some(America/Los_Angeles)) AS date_form -- !query -select col, date_format(col, 'E EE EEE EEEE') from v +select col, date_format(col, 'E EE EEE EEEE'), to_char(col, 'E EE EEE EEEE') from v -- !query analysis -Project [col#x, date_format(col#x, E EE EEE EEEE, Some(America/Los_Angeles)) AS date_format(col, E EE EEE EEEE)#x] +Project [col#x, date_format(col#x, E EE EEE EEEE, Some(America/Los_Angeles)) AS date_format(col, E EE EEE EEEE)#x, date_format(col#x, E EE EEE EEEE, Some(America/Los_Angeles)) AS date_format(col, E EE EEE EEEE)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -107,9 +107,9 @@ Project [col#x, date_format(col#x, E EE EEE EEEE, Some(America/Los_Angeles)) AS -- !query -select col, date_format(col, 'F') from v +select col, date_format(col, 'F'), to_char(col, 'F') from v -- !query analysis -Project [col#x, date_format(col#x, F, Some(America/Los_Angeles)) AS date_format(col, F)#x] +Project [col#x, date_format(col#x, F, Some(America/Los_Angeles)) AS date_format(col, F)#x, date_format(col#x, F, Some(America/Los_Angeles)) AS date_format(col, F)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -119,9 +119,9 @@ Project [col#x, date_format(col#x, F, Some(America/Los_Angeles)) AS date_format( -- !query -select col, date_format(col, 'd dd') from v +select col, date_format(col, 'd dd'), to_char(col, 'd dd') from v -- !query analysis -Project [col#x, date_format(col#x, d dd, Some(America/Los_Angeles)) AS date_format(col, d dd)#x] +Project [col#x, date_format(col#x, d dd, Some(America/Los_Angeles)) AS date_format(col, d dd)#x, date_format(col#x, d dd, Some(America/Los_Angeles)) AS date_format(col, d dd)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -131,15 +131,15 @@ Project [col#x, date_format(col#x, d dd, Some(America/Los_Angeles)) AS date_form -- !query -select col, date_format(col, 'DD') from v where col = timestamp '2100-01-01 01:33:33.123America/Los_Angeles' +select col, date_format(col, 'DD'), to_char(col, 'DD') from v where col = timestamp '2100-01-01 01:33:33.123America/Los_Angeles' -- !query analysis [Analyzer test output redacted due to nondeterminism] -- !query -select col, date_format(col, 'D DDD') from v +select col, date_format(col, 'D DDD'), to_char(col, 'D DDD') from v -- !query analysis -Project [col#x, date_format(col#x, D DDD, Some(America/Los_Angeles)) AS date_format(col, D DDD)#x] +Project [col#x, date_format(col#x, D DDD, Some(America/Los_Angeles)) AS date_format(col, D DDD)#x, date_format(col#x, D DDD, Some(America/Los_Angeles)) AS date_format(col, D DDD)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -149,9 +149,9 @@ Project [col#x, date_format(col#x, D DDD, Some(America/Los_Angeles)) AS date_for -- !query -select col, date_format(col, 'H HH') from v +select col, date_format(col, 'H HH'), to_char(col, 'H HH') from v -- !query analysis -Project [col#x, date_format(col#x, H HH, Some(America/Los_Angeles)) AS date_format(col, H HH)#x] +Project [col#x, date_format(col#x, H HH, Some(America/Los_Angeles)) AS date_format(col, H HH)#x, date_format(col#x, H HH, Some(America/Los_Angeles)) AS date_format(col, H HH)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -161,9 +161,9 @@ Project [col#x, date_format(col#x, H HH, Some(America/Los_Angeles)) AS date_form -- !query -select col, date_format(col, 'h hh') from v +select col, date_format(col, 'h hh'), to_char(col, 'h hh') from v -- !query analysis -Project [col#x, date_format(col#x, h hh, Some(America/Los_Angeles)) AS date_format(col, h hh)#x] +Project [col#x, date_format(col#x, h hh, Some(America/Los_Angeles)) AS date_format(col, h hh)#x, date_format(col#x, h hh, Some(America/Los_Angeles)) AS date_format(col, h hh)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -173,9 +173,9 @@ Project [col#x, date_format(col#x, h hh, Some(America/Los_Angeles)) AS date_form -- !query -select col, date_format(col, 'k kk') from v +select col, date_format(col, 'k kk'), to_char(col, 'k kk') from v -- !query analysis -Project [col#x, date_format(col#x, k kk, Some(America/Los_Angeles)) AS date_format(col, k kk)#x] +Project [col#x, date_format(col#x, k kk, Some(America/Los_Angeles)) AS date_format(col, k kk)#x, date_format(col#x, k kk, Some(America/Los_Angeles)) AS date_format(col, k kk)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -185,9 +185,9 @@ Project [col#x, date_format(col#x, k kk, Some(America/Los_Angeles)) AS date_form -- !query -select col, date_format(col, 'K KK') from v +select col, date_format(col, 'K KK'), to_char(col, 'K KK') from v -- !query analysis -Project [col#x, date_format(col#x, K KK, Some(America/Los_Angeles)) AS date_format(col, K KK)#x] +Project [col#x, date_format(col#x, K KK, Some(America/Los_Angeles)) AS date_format(col, K KK)#x, date_format(col#x, K KK, Some(America/Los_Angeles)) AS date_format(col, K KK)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -197,9 +197,9 @@ Project [col#x, date_format(col#x, K KK, Some(America/Los_Angeles)) AS date_form -- !query -select col, date_format(col, 'm mm') from v +select col, date_format(col, 'm mm'), to_char(col, 'm mm') from v -- !query analysis -Project [col#x, date_format(col#x, m mm, Some(America/Los_Angeles)) AS date_format(col, m mm)#x] +Project [col#x, date_format(col#x, m mm, Some(America/Los_Angeles)) AS date_format(col, m mm)#x, date_format(col#x, m mm, Some(America/Los_Angeles)) AS date_format(col, m mm)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -209,9 +209,9 @@ Project [col#x, date_format(col#x, m mm, Some(America/Los_Angeles)) AS date_form -- !query -select col, date_format(col, 's ss') from v +select col, date_format(col, 's ss'), to_char(col, 's ss') from v -- !query analysis -Project [col#x, date_format(col#x, s ss, Some(America/Los_Angeles)) AS date_format(col, s ss)#x] +Project [col#x, date_format(col#x, s ss, Some(America/Los_Angeles)) AS date_format(col, s ss)#x, date_format(col#x, s ss, Some(America/Los_Angeles)) AS date_format(col, s ss)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -221,9 +221,9 @@ Project [col#x, date_format(col#x, s ss, Some(America/Los_Angeles)) AS date_form -- !query -select col, date_format(col, 'S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS') from v +select col, date_format(col, 'S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS'), to_char(col, 'S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS') from v -- !query analysis -Project [col#x, date_format(col#x, S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS, Some(America/Los_Angeles)) AS date_format(col, S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS)#x] +Project [col#x, date_format(col#x, S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS, Some(America/Los_Angeles)) AS date_format(col, S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS)#x, date_format(col#x, S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS, Some(America/Los_Angeles)) AS date_format(col, S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -233,9 +233,9 @@ Project [col#x, date_format(col#x, S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS S -- !query -select col, date_format(col, 'a') from v +select col, date_format(col, 'a'), to_char(col, 'a') from v -- !query analysis -Project [col#x, date_format(col#x, a, Some(America/Los_Angeles)) AS date_format(col, a)#x] +Project [col#x, date_format(col#x, a, Some(America/Los_Angeles)) AS date_format(col, a)#x, date_format(col#x, a, Some(America/Los_Angeles)) AS date_format(col, a)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -245,9 +245,9 @@ Project [col#x, date_format(col#x, a, Some(America/Los_Angeles)) AS date_format( -- !query -select col, date_format(col, 'VV') from v +select col, date_format(col, 'VV'), to_char(col, 'VV') from v -- !query analysis -Project [col#x, date_format(col#x, VV, Some(America/Los_Angeles)) AS date_format(col, VV)#x] +Project [col#x, date_format(col#x, VV, Some(America/Los_Angeles)) AS date_format(col, VV)#x, date_format(col#x, VV, Some(America/Los_Angeles)) AS date_format(col, VV)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -257,9 +257,9 @@ Project [col#x, date_format(col#x, VV, Some(America/Los_Angeles)) AS date_format -- !query -select col, date_format(col, 'z zz zzz zzzz') from v +select col, date_format(col, 'z zz zzz zzzz'), to_char(col, 'z zz zzz zzzz') from v -- !query analysis -Project [col#x, date_format(col#x, z zz zzz zzzz, Some(America/Los_Angeles)) AS date_format(col, z zz zzz zzzz)#x] +Project [col#x, date_format(col#x, z zz zzz zzzz, Some(America/Los_Angeles)) AS date_format(col, z zz zzz zzzz)#x, date_format(col#x, z zz zzz zzzz, Some(America/Los_Angeles)) AS date_format(col, z zz zzz zzzz)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -269,9 +269,9 @@ Project [col#x, date_format(col#x, z zz zzz zzzz, Some(America/Los_Angeles)) AS -- !query -select col, date_format(col, 'X XX XXX') from v +select col, date_format(col, 'X XX XXX'), to_char(col, 'X XX XXX') from v -- !query analysis -Project [col#x, date_format(col#x, X XX XXX, Some(America/Los_Angeles)) AS date_format(col, X XX XXX)#x] +Project [col#x, date_format(col#x, X XX XXX, Some(America/Los_Angeles)) AS date_format(col, X XX XXX)#x, date_format(col#x, X XX XXX, Some(America/Los_Angeles)) AS date_format(col, X XX XXX)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -281,9 +281,9 @@ Project [col#x, date_format(col#x, X XX XXX, Some(America/Los_Angeles)) AS date_ -- !query -select col, date_format(col, 'XXXX XXXXX') from v +select col, date_format(col, 'XXXX XXXXX'), to_char(col, 'XXXX XXXXX') from v -- !query analysis -Project [col#x, date_format(col#x, XXXX XXXXX, Some(America/Los_Angeles)) AS date_format(col, XXXX XXXXX)#x] +Project [col#x, date_format(col#x, XXXX XXXXX, Some(America/Los_Angeles)) AS date_format(col, XXXX XXXXX)#x, date_format(col#x, XXXX XXXXX, Some(America/Los_Angeles)) AS date_format(col, XXXX XXXXX)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -293,9 +293,9 @@ Project [col#x, date_format(col#x, XXXX XXXXX, Some(America/Los_Angeles)) AS dat -- !query -select col, date_format(col, 'Z ZZ ZZZ ZZZZ ZZZZZ') from v +select col, date_format(col, 'Z ZZ ZZZ ZZZZ ZZZZZ'), to_char(col, 'Z ZZ ZZZ ZZZZ ZZZZZ') from v -- !query analysis -Project [col#x, date_format(col#x, Z ZZ ZZZ ZZZZ ZZZZZ, Some(America/Los_Angeles)) AS date_format(col, Z ZZ ZZZ ZZZZ ZZZZZ)#x] +Project [col#x, date_format(col#x, Z ZZ ZZZ ZZZZ ZZZZZ, Some(America/Los_Angeles)) AS date_format(col, Z ZZ ZZZ ZZZZ ZZZZZ)#x, date_format(col#x, Z ZZ ZZZ ZZZZ ZZZZZ, Some(America/Los_Angeles)) AS date_format(col, Z ZZ ZZZ ZZZZ ZZZZZ)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -305,9 +305,9 @@ Project [col#x, date_format(col#x, Z ZZ ZZZ ZZZZ ZZZZZ, Some(America/Los_Angeles -- !query -select col, date_format(col, 'O OOOO') from v +select col, date_format(col, 'O OOOO'), to_char(col, 'O OOOO') from v -- !query analysis -Project [col#x, date_format(col#x, O OOOO, Some(America/Los_Angeles)) AS date_format(col, O OOOO)#x] +Project [col#x, date_format(col#x, O OOOO, Some(America/Los_Angeles)) AS date_format(col, O OOOO)#x, date_format(col#x, O OOOO, Some(America/Los_Angeles)) AS date_format(col, O OOOO)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -317,9 +317,9 @@ Project [col#x, date_format(col#x, O OOOO, Some(America/Los_Angeles)) AS date_fo -- !query -select col, date_format(col, 'x xx xxx xxxx xxxx xxxxx') from v +select col, date_format(col, 'x xx xxx xxxx xxxx xxxxx'), to_char(col, 'x xx xxx xxxx xxxx xxxxx') from v -- !query analysis -Project [col#x, date_format(col#x, x xx xxx xxxx xxxx xxxxx, Some(America/Los_Angeles)) AS date_format(col, x xx xxx xxxx xxxx xxxxx)#x] +Project [col#x, date_format(col#x, x xx xxx xxxx xxxx xxxxx, Some(America/Los_Angeles)) AS date_format(col, x xx xxx xxxx xxxx xxxxx)#x, date_format(col#x, x xx xxx xxxx xxxx xxxxx, Some(America/Los_Angeles)) AS date_format(col, x xx xxx xxxx xxxx xxxxx)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -329,9 +329,9 @@ Project [col#x, date_format(col#x, x xx xxx xxxx xxxx xxxxx, Some(America/Los_An -- !query -select col, date_format(col, '[yyyy-MM-dd HH:mm:ss]') from v +select col, date_format(col, '[yyyy-MM-dd HH:mm:ss]'), to_char(col, '[yyyy-MM-dd HH:mm:ss]') from v -- !query analysis -Project [col#x, date_format(col#x, [yyyy-MM-dd HH:mm:ss], Some(America/Los_Angeles)) AS date_format(col, [yyyy-MM-dd HH:mm:ss])#x] +Project [col#x, date_format(col#x, [yyyy-MM-dd HH:mm:ss], Some(America/Los_Angeles)) AS date_format(col, [yyyy-MM-dd HH:mm:ss])#x, date_format(col#x, [yyyy-MM-dd HH:mm:ss], Some(America/Los_Angeles)) AS date_format(col, [yyyy-MM-dd HH:mm:ss])#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -341,9 +341,9 @@ Project [col#x, date_format(col#x, [yyyy-MM-dd HH:mm:ss], Some(America/Los_Angel -- !query -select col, date_format(col, "姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV'") from v +select col, date_format(col, "姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV'"), to_char(col, "姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV'") from v -- !query analysis -Project [col#x, date_format(col#x, 姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV', Some(America/Los_Angeles)) AS date_format(col, 姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV')#x] +Project [col#x, date_format(col#x, 姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV', Some(America/Los_Angeles)) AS date_format(col, 姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV')#x, date_format(col#x, 姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV', Some(America/Los_Angeles)) AS date_format(col, 姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV')#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -353,9 +353,9 @@ Project [col#x, date_format(col#x, 姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV', Some(Ame -- !query -select col, date_format(col, "''") from v +select col, date_format(col, "''"), to_char(col, "''") from v -- !query analysis -Project [col#x, date_format(col#x, '', Some(America/Los_Angeles)) AS date_format(col, '')#x] +Project [col#x, date_format(col#x, '', Some(America/Los_Angeles)) AS date_format(col, '')#x, date_format(col#x, '', Some(America/Los_Angeles)) AS date_format(col, '')#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -365,9 +365,9 @@ Project [col#x, date_format(col#x, '', Some(America/Los_Angeles)) AS date_format -- !query -select col, date_format(col, '') from v +select col, date_format(col, ''), to_char(col, '') from v -- !query analysis -Project [col#x, date_format(col#x, , Some(America/Los_Angeles)) AS date_format(col, )#x] +Project [col#x, date_format(col#x, , Some(America/Los_Angeles)) AS date_format(col, )#x, date_format(col#x, , Some(America/Los_Angeles)) AS date_format(col, )#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] diff --git a/sql/core/src/test/resources/sql-tests/inputs/datetime-formatting.sql b/sql/core/src/test/resources/sql-tests/inputs/datetime-formatting.sql index 2d70326f4f3c0..a22b0bbb2822b 100644 --- a/sql/core/src/test/resources/sql-tests/inputs/datetime-formatting.sql +++ b/sql/core/src/test/resources/sql-tests/inputs/datetime-formatting.sql @@ -9,60 +9,60 @@ create temporary view v as select col from values (timestamp '2020-01-01 01:33:33.123Asia/Shanghai'), (timestamp '2100-01-01 01:33:33.123America/Los_Angeles') t(col); -select col, date_format(col, 'G GG GGG GGGG') from v; +select col, date_format(col, 'G GG GGG GGGG'), to_char(col, 'G GG GGG GGGG') from v; -select col, date_format(col, 'y yy yyy yyyy yyyyy yyyyyy') from v; +select col, date_format(col, 'y yy yyy yyyy yyyyy yyyyyy'), to_char(col, 'y yy yyy yyyy yyyyy yyyyyy') from v; -select col, date_format(col, 'q qq') from v; +select col, date_format(col, 'q qq'), to_char(col, 'q qq') from v; -select col, date_format(col, 'Q QQ QQQ QQQQ') from v; +select col, date_format(col, 'Q QQ QQQ QQQQ'), to_char(col, 'Q QQ QQQ QQQQ') from v; -select col, date_format(col, 'M MM MMM MMMM') from v; +select col, date_format(col, 'M MM MMM MMMM'), to_char(col, 'M MM MMM MMMM') from v; -select col, date_format(col, 'L LL') from v; +select col, date_format(col, 'L LL'), to_char(col, 'L LL') from v; -select col, date_format(col, 'E EE EEE EEEE') from v; +select col, date_format(col, 'E EE EEE EEEE'), to_char(col, 'E EE EEE EEEE') from v; -select col, date_format(col, 'F') from v; +select col, date_format(col, 'F'), to_char(col, 'F') from v; -select col, date_format(col, 'd dd') from v; +select col, date_format(col, 'd dd'), to_char(col, 'd dd') from v; -select col, date_format(col, 'DD') from v where col = timestamp '2100-01-01 01:33:33.123America/Los_Angeles'; -select col, date_format(col, 'D DDD') from v; +select col, date_format(col, 'DD'), to_char(col, 'DD') from v where col = timestamp '2100-01-01 01:33:33.123America/Los_Angeles'; +select col, date_format(col, 'D DDD'), to_char(col, 'D DDD') from v; -select col, date_format(col, 'H HH') from v; +select col, date_format(col, 'H HH'), to_char(col, 'H HH') from v; -select col, date_format(col, 'h hh') from v; +select col, date_format(col, 'h hh'), to_char(col, 'h hh') from v; -select col, date_format(col, 'k kk') from v; +select col, date_format(col, 'k kk'), to_char(col, 'k kk') from v; -select col, date_format(col, 'K KK') from v; +select col, date_format(col, 'K KK'), to_char(col, 'K KK') from v; -select col, date_format(col, 'm mm') from v; +select col, date_format(col, 'm mm'), to_char(col, 'm mm') from v; -select col, date_format(col, 's ss') from v; +select col, date_format(col, 's ss'), to_char(col, 's ss') from v; -select col, date_format(col, 'S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS') from v; +select col, date_format(col, 'S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS'), to_char(col, 'S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS') from v; -select col, date_format(col, 'a') from v; +select col, date_format(col, 'a'), to_char(col, 'a') from v; -select col, date_format(col, 'VV') from v; +select col, date_format(col, 'VV'), to_char(col, 'VV') from v; -select col, date_format(col, 'z zz zzz zzzz') from v; +select col, date_format(col, 'z zz zzz zzzz'), to_char(col, 'z zz zzz zzzz') from v; -select col, date_format(col, 'X XX XXX') from v; -select col, date_format(col, 'XXXX XXXXX') from v; +select col, date_format(col, 'X XX XXX'), to_char(col, 'X XX XXX') from v; +select col, date_format(col, 'XXXX XXXXX'), to_char(col, 'XXXX XXXXX') from v; -select col, date_format(col, 'Z ZZ ZZZ ZZZZ ZZZZZ') from v; +select col, date_format(col, 'Z ZZ ZZZ ZZZZ ZZZZZ'), to_char(col, 'Z ZZ ZZZ ZZZZ ZZZZZ') from v; -select col, date_format(col, 'O OOOO') from v; +select col, date_format(col, 'O OOOO'), to_char(col, 'O OOOO') from v; -select col, date_format(col, 'x xx xxx xxxx xxxx xxxxx') from v; +select col, date_format(col, 'x xx xxx xxxx xxxx xxxxx'), to_char(col, 'x xx xxx xxxx xxxx xxxxx') from v; -- optional pattern, but the results won't be optional for formatting -select col, date_format(col, '[yyyy-MM-dd HH:mm:ss]') from v; +select col, date_format(col, '[yyyy-MM-dd HH:mm:ss]'), to_char(col, '[yyyy-MM-dd HH:mm:ss]') from v; -- literals -select col, date_format(col, "姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV'") from v; -select col, date_format(col, "''") from v; -select col, date_format(col, '') from v; +select col, date_format(col, "姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV'"), to_char(col, "姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV'") from v; +select col, date_format(col, "''"), to_char(col, "''") from v; +select col, date_format(col, ''), to_char(col, '') from v; diff --git a/sql/core/src/test/resources/sql-tests/results/datetime-formatting.sql.out b/sql/core/src/test/resources/sql-tests/results/datetime-formatting.sql.out index 960de2af4a3ae..cc88874ad3b1d 100644 --- a/sql/core/src/test/resources/sql-tests/results/datetime-formatting.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/datetime-formatting.sql.out @@ -15,414 +15,414 @@ struct<> -- !query -select col, date_format(col, 'G GG GGG GGGG') from v +select col, date_format(col, 'G GG GGG GGGG'), to_char(col, 'G GG GGG GGGG') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 AD AD AD Anno Domini -1969-12-31 15:00:00 AD AD AD Anno Domini -1970-12-31 04:59:59.999 AD AD AD Anno Domini -1996-03-31 07:03:33.123 AD AD AD Anno Domini -2018-11-17 05:33:33.123 AD AD AD Anno Domini -2019-12-31 09:33:33.123 AD AD AD Anno Domini -2100-01-01 01:33:33.123 AD AD AD Anno Domini +1582-05-31 19:40:35.123 AD AD AD Anno Domini AD AD AD Anno Domini +1969-12-31 15:00:00 AD AD AD Anno Domini AD AD AD Anno Domini +1970-12-31 04:59:59.999 AD AD AD Anno Domini AD AD AD Anno Domini +1996-03-31 07:03:33.123 AD AD AD Anno Domini AD AD AD Anno Domini +2018-11-17 05:33:33.123 AD AD AD Anno Domini AD AD AD Anno Domini +2019-12-31 09:33:33.123 AD AD AD Anno Domini AD AD AD Anno Domini +2100-01-01 01:33:33.123 AD AD AD Anno Domini AD AD AD Anno Domini -- !query -select col, date_format(col, 'y yy yyy yyyy yyyyy yyyyyy') from v +select col, date_format(col, 'y yy yyy yyyy yyyyy yyyyyy'), to_char(col, 'y yy yyy yyyy yyyyy yyyyyy') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 1582 82 1582 1582 01582 001582 -1969-12-31 15:00:00 1969 69 1969 1969 01969 001969 -1970-12-31 04:59:59.999 1970 70 1970 1970 01970 001970 -1996-03-31 07:03:33.123 1996 96 1996 1996 01996 001996 -2018-11-17 05:33:33.123 2018 18 2018 2018 02018 002018 -2019-12-31 09:33:33.123 2019 19 2019 2019 02019 002019 -2100-01-01 01:33:33.123 2100 00 2100 2100 02100 002100 +1582-05-31 19:40:35.123 1582 82 1582 1582 01582 001582 1582 82 1582 1582 01582 001582 +1969-12-31 15:00:00 1969 69 1969 1969 01969 001969 1969 69 1969 1969 01969 001969 +1970-12-31 04:59:59.999 1970 70 1970 1970 01970 001970 1970 70 1970 1970 01970 001970 +1996-03-31 07:03:33.123 1996 96 1996 1996 01996 001996 1996 96 1996 1996 01996 001996 +2018-11-17 05:33:33.123 2018 18 2018 2018 02018 002018 2018 18 2018 2018 02018 002018 +2019-12-31 09:33:33.123 2019 19 2019 2019 02019 002019 2019 19 2019 2019 02019 002019 +2100-01-01 01:33:33.123 2100 00 2100 2100 02100 002100 2100 00 2100 2100 02100 002100 -- !query -select col, date_format(col, 'q qq') from v +select col, date_format(col, 'q qq'), to_char(col, 'q qq') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 2 02 -1969-12-31 15:00:00 4 04 -1970-12-31 04:59:59.999 4 04 -1996-03-31 07:03:33.123 1 01 -2018-11-17 05:33:33.123 4 04 -2019-12-31 09:33:33.123 4 04 -2100-01-01 01:33:33.123 1 01 +1582-05-31 19:40:35.123 2 02 2 02 +1969-12-31 15:00:00 4 04 4 04 +1970-12-31 04:59:59.999 4 04 4 04 +1996-03-31 07:03:33.123 1 01 1 01 +2018-11-17 05:33:33.123 4 04 4 04 +2019-12-31 09:33:33.123 4 04 4 04 +2100-01-01 01:33:33.123 1 01 1 01 -- !query -select col, date_format(col, 'Q QQ QQQ QQQQ') from v +select col, date_format(col, 'Q QQ QQQ QQQQ'), to_char(col, 'Q QQ QQQ QQQQ') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 2 02 Q2 2nd quarter -1969-12-31 15:00:00 4 04 Q4 4th quarter -1970-12-31 04:59:59.999 4 04 Q4 4th quarter -1996-03-31 07:03:33.123 1 01 Q1 1st quarter -2018-11-17 05:33:33.123 4 04 Q4 4th quarter -2019-12-31 09:33:33.123 4 04 Q4 4th quarter -2100-01-01 01:33:33.123 1 01 Q1 1st quarter +1582-05-31 19:40:35.123 2 02 Q2 2nd quarter 2 02 Q2 2nd quarter +1969-12-31 15:00:00 4 04 Q4 4th quarter 4 04 Q4 4th quarter +1970-12-31 04:59:59.999 4 04 Q4 4th quarter 4 04 Q4 4th quarter +1996-03-31 07:03:33.123 1 01 Q1 1st quarter 1 01 Q1 1st quarter +2018-11-17 05:33:33.123 4 04 Q4 4th quarter 4 04 Q4 4th quarter +2019-12-31 09:33:33.123 4 04 Q4 4th quarter 4 04 Q4 4th quarter +2100-01-01 01:33:33.123 1 01 Q1 1st quarter 1 01 Q1 1st quarter -- !query -select col, date_format(col, 'M MM MMM MMMM') from v +select col, date_format(col, 'M MM MMM MMMM'), to_char(col, 'M MM MMM MMMM') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 5 05 May May -1969-12-31 15:00:00 12 12 Dec December -1970-12-31 04:59:59.999 12 12 Dec December -1996-03-31 07:03:33.123 3 03 Mar March -2018-11-17 05:33:33.123 11 11 Nov November -2019-12-31 09:33:33.123 12 12 Dec December -2100-01-01 01:33:33.123 1 01 Jan January +1582-05-31 19:40:35.123 5 05 May May 5 05 May May +1969-12-31 15:00:00 12 12 Dec December 12 12 Dec December +1970-12-31 04:59:59.999 12 12 Dec December 12 12 Dec December +1996-03-31 07:03:33.123 3 03 Mar March 3 03 Mar March +2018-11-17 05:33:33.123 11 11 Nov November 11 11 Nov November +2019-12-31 09:33:33.123 12 12 Dec December 12 12 Dec December +2100-01-01 01:33:33.123 1 01 Jan January 1 01 Jan January -- !query -select col, date_format(col, 'L LL') from v +select col, date_format(col, 'L LL'), to_char(col, 'L LL') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 5 05 -1969-12-31 15:00:00 12 12 -1970-12-31 04:59:59.999 12 12 -1996-03-31 07:03:33.123 3 03 -2018-11-17 05:33:33.123 11 11 -2019-12-31 09:33:33.123 12 12 -2100-01-01 01:33:33.123 1 01 +1582-05-31 19:40:35.123 5 05 5 05 +1969-12-31 15:00:00 12 12 12 12 +1970-12-31 04:59:59.999 12 12 12 12 +1996-03-31 07:03:33.123 3 03 3 03 +2018-11-17 05:33:33.123 11 11 11 11 +2019-12-31 09:33:33.123 12 12 12 12 +2100-01-01 01:33:33.123 1 01 1 01 -- !query -select col, date_format(col, 'E EE EEE EEEE') from v +select col, date_format(col, 'E EE EEE EEEE'), to_char(col, 'E EE EEE EEEE') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 Mon Mon Mon Monday -1969-12-31 15:00:00 Wed Wed Wed Wednesday -1970-12-31 04:59:59.999 Thu Thu Thu Thursday -1996-03-31 07:03:33.123 Sun Sun Sun Sunday -2018-11-17 05:33:33.123 Sat Sat Sat Saturday -2019-12-31 09:33:33.123 Tue Tue Tue Tuesday -2100-01-01 01:33:33.123 Fri Fri Fri Friday +1582-05-31 19:40:35.123 Mon Mon Mon Monday Mon Mon Mon Monday +1969-12-31 15:00:00 Wed Wed Wed Wednesday Wed Wed Wed Wednesday +1970-12-31 04:59:59.999 Thu Thu Thu Thursday Thu Thu Thu Thursday +1996-03-31 07:03:33.123 Sun Sun Sun Sunday Sun Sun Sun Sunday +2018-11-17 05:33:33.123 Sat Sat Sat Saturday Sat Sat Sat Saturday +2019-12-31 09:33:33.123 Tue Tue Tue Tuesday Tue Tue Tue Tuesday +2100-01-01 01:33:33.123 Fri Fri Fri Friday Fri Fri Fri Friday -- !query -select col, date_format(col, 'F') from v +select col, date_format(col, 'F'), to_char(col, 'F') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 3 -1969-12-31 15:00:00 3 -1970-12-31 04:59:59.999 3 -1996-03-31 07:03:33.123 3 -2018-11-17 05:33:33.123 3 -2019-12-31 09:33:33.123 3 -2100-01-01 01:33:33.123 1 +1582-05-31 19:40:35.123 3 3 +1969-12-31 15:00:00 3 3 +1970-12-31 04:59:59.999 3 3 +1996-03-31 07:03:33.123 3 3 +2018-11-17 05:33:33.123 3 3 +2019-12-31 09:33:33.123 3 3 +2100-01-01 01:33:33.123 1 1 -- !query -select col, date_format(col, 'd dd') from v +select col, date_format(col, 'd dd'), to_char(col, 'd dd') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 31 31 -1969-12-31 15:00:00 31 31 -1970-12-31 04:59:59.999 31 31 -1996-03-31 07:03:33.123 31 31 -2018-11-17 05:33:33.123 17 17 -2019-12-31 09:33:33.123 31 31 -2100-01-01 01:33:33.123 1 01 +1582-05-31 19:40:35.123 31 31 31 31 +1969-12-31 15:00:00 31 31 31 31 +1970-12-31 04:59:59.999 31 31 31 31 +1996-03-31 07:03:33.123 31 31 31 31 +2018-11-17 05:33:33.123 17 17 17 17 +2019-12-31 09:33:33.123 31 31 31 31 +2100-01-01 01:33:33.123 1 01 1 01 -- !query -select col, date_format(col, 'DD') from v where col = timestamp '2100-01-01 01:33:33.123America/Los_Angeles' +select col, date_format(col, 'DD'), to_char(col, 'DD') from v where col = timestamp '2100-01-01 01:33:33.123America/Los_Angeles' -- !query schema -struct +struct -- !query output -2100-01-01 01:33:33.123 01 +2100-01-01 01:33:33.123 01 01 -- !query -select col, date_format(col, 'D DDD') from v +select col, date_format(col, 'D DDD'), to_char(col, 'D DDD') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 151 151 -1969-12-31 15:00:00 365 365 -1970-12-31 04:59:59.999 365 365 -1996-03-31 07:03:33.123 91 091 -2018-11-17 05:33:33.123 321 321 -2019-12-31 09:33:33.123 365 365 -2100-01-01 01:33:33.123 1 001 +1582-05-31 19:40:35.123 151 151 151 151 +1969-12-31 15:00:00 365 365 365 365 +1970-12-31 04:59:59.999 365 365 365 365 +1996-03-31 07:03:33.123 91 091 91 091 +2018-11-17 05:33:33.123 321 321 321 321 +2019-12-31 09:33:33.123 365 365 365 365 +2100-01-01 01:33:33.123 1 001 1 001 -- !query -select col, date_format(col, 'H HH') from v +select col, date_format(col, 'H HH'), to_char(col, 'H HH') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 19 19 -1969-12-31 15:00:00 15 15 -1970-12-31 04:59:59.999 4 04 -1996-03-31 07:03:33.123 7 07 -2018-11-17 05:33:33.123 5 05 -2019-12-31 09:33:33.123 9 09 -2100-01-01 01:33:33.123 1 01 +1582-05-31 19:40:35.123 19 19 19 19 +1969-12-31 15:00:00 15 15 15 15 +1970-12-31 04:59:59.999 4 04 4 04 +1996-03-31 07:03:33.123 7 07 7 07 +2018-11-17 05:33:33.123 5 05 5 05 +2019-12-31 09:33:33.123 9 09 9 09 +2100-01-01 01:33:33.123 1 01 1 01 -- !query -select col, date_format(col, 'h hh') from v +select col, date_format(col, 'h hh'), to_char(col, 'h hh') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 7 07 -1969-12-31 15:00:00 3 03 -1970-12-31 04:59:59.999 4 04 -1996-03-31 07:03:33.123 7 07 -2018-11-17 05:33:33.123 5 05 -2019-12-31 09:33:33.123 9 09 -2100-01-01 01:33:33.123 1 01 +1582-05-31 19:40:35.123 7 07 7 07 +1969-12-31 15:00:00 3 03 3 03 +1970-12-31 04:59:59.999 4 04 4 04 +1996-03-31 07:03:33.123 7 07 7 07 +2018-11-17 05:33:33.123 5 05 5 05 +2019-12-31 09:33:33.123 9 09 9 09 +2100-01-01 01:33:33.123 1 01 1 01 -- !query -select col, date_format(col, 'k kk') from v +select col, date_format(col, 'k kk'), to_char(col, 'k kk') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 19 19 -1969-12-31 15:00:00 15 15 -1970-12-31 04:59:59.999 4 04 -1996-03-31 07:03:33.123 7 07 -2018-11-17 05:33:33.123 5 05 -2019-12-31 09:33:33.123 9 09 -2100-01-01 01:33:33.123 1 01 +1582-05-31 19:40:35.123 19 19 19 19 +1969-12-31 15:00:00 15 15 15 15 +1970-12-31 04:59:59.999 4 04 4 04 +1996-03-31 07:03:33.123 7 07 7 07 +2018-11-17 05:33:33.123 5 05 5 05 +2019-12-31 09:33:33.123 9 09 9 09 +2100-01-01 01:33:33.123 1 01 1 01 -- !query -select col, date_format(col, 'K KK') from v +select col, date_format(col, 'K KK'), to_char(col, 'K KK') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 7 07 -1969-12-31 15:00:00 3 03 -1970-12-31 04:59:59.999 4 04 -1996-03-31 07:03:33.123 7 07 -2018-11-17 05:33:33.123 5 05 -2019-12-31 09:33:33.123 9 09 -2100-01-01 01:33:33.123 1 01 +1582-05-31 19:40:35.123 7 07 7 07 +1969-12-31 15:00:00 3 03 3 03 +1970-12-31 04:59:59.999 4 04 4 04 +1996-03-31 07:03:33.123 7 07 7 07 +2018-11-17 05:33:33.123 5 05 5 05 +2019-12-31 09:33:33.123 9 09 9 09 +2100-01-01 01:33:33.123 1 01 1 01 -- !query -select col, date_format(col, 'm mm') from v +select col, date_format(col, 'm mm'), to_char(col, 'm mm') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 40 40 -1969-12-31 15:00:00 0 00 -1970-12-31 04:59:59.999 59 59 -1996-03-31 07:03:33.123 3 03 -2018-11-17 05:33:33.123 33 33 -2019-12-31 09:33:33.123 33 33 -2100-01-01 01:33:33.123 33 33 +1582-05-31 19:40:35.123 40 40 40 40 +1969-12-31 15:00:00 0 00 0 00 +1970-12-31 04:59:59.999 59 59 59 59 +1996-03-31 07:03:33.123 3 03 3 03 +2018-11-17 05:33:33.123 33 33 33 33 +2019-12-31 09:33:33.123 33 33 33 33 +2100-01-01 01:33:33.123 33 33 33 33 -- !query -select col, date_format(col, 's ss') from v +select col, date_format(col, 's ss'), to_char(col, 's ss') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 35 35 -1969-12-31 15:00:00 0 00 -1970-12-31 04:59:59.999 59 59 -1996-03-31 07:03:33.123 33 33 -2018-11-17 05:33:33.123 33 33 -2019-12-31 09:33:33.123 33 33 -2100-01-01 01:33:33.123 33 33 +1582-05-31 19:40:35.123 35 35 35 35 +1969-12-31 15:00:00 0 00 0 00 +1970-12-31 04:59:59.999 59 59 59 59 +1996-03-31 07:03:33.123 33 33 33 33 +2018-11-17 05:33:33.123 33 33 33 33 +2019-12-31 09:33:33.123 33 33 33 33 +2100-01-01 01:33:33.123 33 33 33 33 -- !query -select col, date_format(col, 'S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS') from v +select col, date_format(col, 'S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS'), to_char(col, 'S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 1 12 123 1230 12300 123000 1230000 12300000 123000000 -1969-12-31 15:00:00 0 00 000 0000 00000 000000 0000000 00000000 000000000 -1970-12-31 04:59:59.999 9 99 999 9990 99900 999000 9990000 99900000 999000000 -1996-03-31 07:03:33.123 1 12 123 1230 12300 123000 1230000 12300000 123000000 -2018-11-17 05:33:33.123 1 12 123 1230 12300 123000 1230000 12300000 123000000 -2019-12-31 09:33:33.123 1 12 123 1230 12300 123000 1230000 12300000 123000000 -2100-01-01 01:33:33.123 1 12 123 1230 12300 123000 1230000 12300000 123000000 +1582-05-31 19:40:35.123 1 12 123 1230 12300 123000 1230000 12300000 123000000 1 12 123 1230 12300 123000 1230000 12300000 123000000 +1969-12-31 15:00:00 0 00 000 0000 00000 000000 0000000 00000000 000000000 0 00 000 0000 00000 000000 0000000 00000000 000000000 +1970-12-31 04:59:59.999 9 99 999 9990 99900 999000 9990000 99900000 999000000 9 99 999 9990 99900 999000 9990000 99900000 999000000 +1996-03-31 07:03:33.123 1 12 123 1230 12300 123000 1230000 12300000 123000000 1 12 123 1230 12300 123000 1230000 12300000 123000000 +2018-11-17 05:33:33.123 1 12 123 1230 12300 123000 1230000 12300000 123000000 1 12 123 1230 12300 123000 1230000 12300000 123000000 +2019-12-31 09:33:33.123 1 12 123 1230 12300 123000 1230000 12300000 123000000 1 12 123 1230 12300 123000 1230000 12300000 123000000 +2100-01-01 01:33:33.123 1 12 123 1230 12300 123000 1230000 12300000 123000000 1 12 123 1230 12300 123000 1230000 12300000 123000000 -- !query -select col, date_format(col, 'a') from v +select col, date_format(col, 'a'), to_char(col, 'a') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 PM -1969-12-31 15:00:00 PM -1970-12-31 04:59:59.999 AM -1996-03-31 07:03:33.123 AM -2018-11-17 05:33:33.123 AM -2019-12-31 09:33:33.123 AM -2100-01-01 01:33:33.123 AM +1582-05-31 19:40:35.123 PM PM +1969-12-31 15:00:00 PM PM +1970-12-31 04:59:59.999 AM AM +1996-03-31 07:03:33.123 AM AM +2018-11-17 05:33:33.123 AM AM +2019-12-31 09:33:33.123 AM AM +2100-01-01 01:33:33.123 AM AM -- !query -select col, date_format(col, 'VV') from v +select col, date_format(col, 'VV'), to_char(col, 'VV') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 America/Los_Angeles -1969-12-31 15:00:00 America/Los_Angeles -1970-12-31 04:59:59.999 America/Los_Angeles -1996-03-31 07:03:33.123 America/Los_Angeles -2018-11-17 05:33:33.123 America/Los_Angeles -2019-12-31 09:33:33.123 America/Los_Angeles -2100-01-01 01:33:33.123 America/Los_Angeles +1582-05-31 19:40:35.123 America/Los_Angeles America/Los_Angeles +1969-12-31 15:00:00 America/Los_Angeles America/Los_Angeles +1970-12-31 04:59:59.999 America/Los_Angeles America/Los_Angeles +1996-03-31 07:03:33.123 America/Los_Angeles America/Los_Angeles +2018-11-17 05:33:33.123 America/Los_Angeles America/Los_Angeles +2019-12-31 09:33:33.123 America/Los_Angeles America/Los_Angeles +2100-01-01 01:33:33.123 America/Los_Angeles America/Los_Angeles -- !query -select col, date_format(col, 'z zz zzz zzzz') from v +select col, date_format(col, 'z zz zzz zzzz'), to_char(col, 'z zz zzz zzzz') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 PST PST PST Pacific Standard Time -1969-12-31 15:00:00 PST PST PST Pacific Standard Time -1970-12-31 04:59:59.999 PST PST PST Pacific Standard Time -1996-03-31 07:03:33.123 PST PST PST Pacific Standard Time -2018-11-17 05:33:33.123 PST PST PST Pacific Standard Time -2019-12-31 09:33:33.123 PST PST PST Pacific Standard Time -2100-01-01 01:33:33.123 PST PST PST Pacific Standard Time +1582-05-31 19:40:35.123 PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time +1969-12-31 15:00:00 PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time +1970-12-31 04:59:59.999 PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time +1996-03-31 07:03:33.123 PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time +2018-11-17 05:33:33.123 PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time +2019-12-31 09:33:33.123 PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time +2100-01-01 01:33:33.123 PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time -- !query -select col, date_format(col, 'X XX XXX') from v +select col, date_format(col, 'X XX XXX'), to_char(col, 'X XX XXX') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 -0752 -0752 -07:52 -1969-12-31 15:00:00 -08 -0800 -08:00 -1970-12-31 04:59:59.999 -08 -0800 -08:00 -1996-03-31 07:03:33.123 -08 -0800 -08:00 -2018-11-17 05:33:33.123 -08 -0800 -08:00 -2019-12-31 09:33:33.123 -08 -0800 -08:00 -2100-01-01 01:33:33.123 -08 -0800 -08:00 +1582-05-31 19:40:35.123 -0752 -0752 -07:52 -0752 -0752 -07:52 +1969-12-31 15:00:00 -08 -0800 -08:00 -08 -0800 -08:00 +1970-12-31 04:59:59.999 -08 -0800 -08:00 -08 -0800 -08:00 +1996-03-31 07:03:33.123 -08 -0800 -08:00 -08 -0800 -08:00 +2018-11-17 05:33:33.123 -08 -0800 -08:00 -08 -0800 -08:00 +2019-12-31 09:33:33.123 -08 -0800 -08:00 -08 -0800 -08:00 +2100-01-01 01:33:33.123 -08 -0800 -08:00 -08 -0800 -08:00 -- !query -select col, date_format(col, 'XXXX XXXXX') from v +select col, date_format(col, 'XXXX XXXXX'), to_char(col, 'XXXX XXXXX') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 -075258 -07:52:58 -1969-12-31 15:00:00 -0800 -08:00 -1970-12-31 04:59:59.999 -0800 -08:00 -1996-03-31 07:03:33.123 -0800 -08:00 -2018-11-17 05:33:33.123 -0800 -08:00 -2019-12-31 09:33:33.123 -0800 -08:00 -2100-01-01 01:33:33.123 -0800 -08:00 +1582-05-31 19:40:35.123 -075258 -07:52:58 -075258 -07:52:58 +1969-12-31 15:00:00 -0800 -08:00 -0800 -08:00 +1970-12-31 04:59:59.999 -0800 -08:00 -0800 -08:00 +1996-03-31 07:03:33.123 -0800 -08:00 -0800 -08:00 +2018-11-17 05:33:33.123 -0800 -08:00 -0800 -08:00 +2019-12-31 09:33:33.123 -0800 -08:00 -0800 -08:00 +2100-01-01 01:33:33.123 -0800 -08:00 -0800 -08:00 -- !query -select col, date_format(col, 'Z ZZ ZZZ ZZZZ ZZZZZ') from v +select col, date_format(col, 'Z ZZ ZZZ ZZZZ ZZZZZ'), to_char(col, 'Z ZZ ZZZ ZZZZ ZZZZZ') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 -0752 -0752 -0752 GMT-07:52:58 -07:52:58 -1969-12-31 15:00:00 -0800 -0800 -0800 GMT-08:00 -08:00 -1970-12-31 04:59:59.999 -0800 -0800 -0800 GMT-08:00 -08:00 -1996-03-31 07:03:33.123 -0800 -0800 -0800 GMT-08:00 -08:00 -2018-11-17 05:33:33.123 -0800 -0800 -0800 GMT-08:00 -08:00 -2019-12-31 09:33:33.123 -0800 -0800 -0800 GMT-08:00 -08:00 -2100-01-01 01:33:33.123 -0800 -0800 -0800 GMT-08:00 -08:00 +1582-05-31 19:40:35.123 -0752 -0752 -0752 GMT-07:52:58 -07:52:58 -0752 -0752 -0752 GMT-07:52:58 -07:52:58 +1969-12-31 15:00:00 -0800 -0800 -0800 GMT-08:00 -08:00 -0800 -0800 -0800 GMT-08:00 -08:00 +1970-12-31 04:59:59.999 -0800 -0800 -0800 GMT-08:00 -08:00 -0800 -0800 -0800 GMT-08:00 -08:00 +1996-03-31 07:03:33.123 -0800 -0800 -0800 GMT-08:00 -08:00 -0800 -0800 -0800 GMT-08:00 -08:00 +2018-11-17 05:33:33.123 -0800 -0800 -0800 GMT-08:00 -08:00 -0800 -0800 -0800 GMT-08:00 -08:00 +2019-12-31 09:33:33.123 -0800 -0800 -0800 GMT-08:00 -08:00 -0800 -0800 -0800 GMT-08:00 -08:00 +2100-01-01 01:33:33.123 -0800 -0800 -0800 GMT-08:00 -08:00 -0800 -0800 -0800 GMT-08:00 -08:00 -- !query -select col, date_format(col, 'O OOOO') from v +select col, date_format(col, 'O OOOO'), to_char(col, 'O OOOO') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 GMT-7:52:58 GMT-07:52:58 -1969-12-31 15:00:00 GMT-8 GMT-08:00 -1970-12-31 04:59:59.999 GMT-8 GMT-08:00 -1996-03-31 07:03:33.123 GMT-8 GMT-08:00 -2018-11-17 05:33:33.123 GMT-8 GMT-08:00 -2019-12-31 09:33:33.123 GMT-8 GMT-08:00 -2100-01-01 01:33:33.123 GMT-8 GMT-08:00 +1582-05-31 19:40:35.123 GMT-7:52:58 GMT-07:52:58 GMT-7:52:58 GMT-07:52:58 +1969-12-31 15:00:00 GMT-8 GMT-08:00 GMT-8 GMT-08:00 +1970-12-31 04:59:59.999 GMT-8 GMT-08:00 GMT-8 GMT-08:00 +1996-03-31 07:03:33.123 GMT-8 GMT-08:00 GMT-8 GMT-08:00 +2018-11-17 05:33:33.123 GMT-8 GMT-08:00 GMT-8 GMT-08:00 +2019-12-31 09:33:33.123 GMT-8 GMT-08:00 GMT-8 GMT-08:00 +2100-01-01 01:33:33.123 GMT-8 GMT-08:00 GMT-8 GMT-08:00 -- !query -select col, date_format(col, 'x xx xxx xxxx xxxx xxxxx') from v +select col, date_format(col, 'x xx xxx xxxx xxxx xxxxx'), to_char(col, 'x xx xxx xxxx xxxx xxxxx') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 -0752 -0752 -07:52 -075258 -075258 -07:52:58 -1969-12-31 15:00:00 -08 -0800 -08:00 -0800 -0800 -08:00 -1970-12-31 04:59:59.999 -08 -0800 -08:00 -0800 -0800 -08:00 -1996-03-31 07:03:33.123 -08 -0800 -08:00 -0800 -0800 -08:00 -2018-11-17 05:33:33.123 -08 -0800 -08:00 -0800 -0800 -08:00 -2019-12-31 09:33:33.123 -08 -0800 -08:00 -0800 -0800 -08:00 -2100-01-01 01:33:33.123 -08 -0800 -08:00 -0800 -0800 -08:00 +1582-05-31 19:40:35.123 -0752 -0752 -07:52 -075258 -075258 -07:52:58 -0752 -0752 -07:52 -075258 -075258 -07:52:58 +1969-12-31 15:00:00 -08 -0800 -08:00 -0800 -0800 -08:00 -08 -0800 -08:00 -0800 -0800 -08:00 +1970-12-31 04:59:59.999 -08 -0800 -08:00 -0800 -0800 -08:00 -08 -0800 -08:00 -0800 -0800 -08:00 +1996-03-31 07:03:33.123 -08 -0800 -08:00 -0800 -0800 -08:00 -08 -0800 -08:00 -0800 -0800 -08:00 +2018-11-17 05:33:33.123 -08 -0800 -08:00 -0800 -0800 -08:00 -08 -0800 -08:00 -0800 -0800 -08:00 +2019-12-31 09:33:33.123 -08 -0800 -08:00 -0800 -0800 -08:00 -08 -0800 -08:00 -0800 -0800 -08:00 +2100-01-01 01:33:33.123 -08 -0800 -08:00 -0800 -0800 -08:00 -08 -0800 -08:00 -0800 -0800 -08:00 -- !query -select col, date_format(col, '[yyyy-MM-dd HH:mm:ss]') from v +select col, date_format(col, '[yyyy-MM-dd HH:mm:ss]'), to_char(col, '[yyyy-MM-dd HH:mm:ss]') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 1582-05-31 19:40:35 -1969-12-31 15:00:00 1969-12-31 15:00:00 -1970-12-31 04:59:59.999 1970-12-31 04:59:59 -1996-03-31 07:03:33.123 1996-03-31 07:03:33 -2018-11-17 05:33:33.123 2018-11-17 05:33:33 -2019-12-31 09:33:33.123 2019-12-31 09:33:33 -2100-01-01 01:33:33.123 2100-01-01 01:33:33 +1582-05-31 19:40:35.123 1582-05-31 19:40:35 1582-05-31 19:40:35 +1969-12-31 15:00:00 1969-12-31 15:00:00 1969-12-31 15:00:00 +1970-12-31 04:59:59.999 1970-12-31 04:59:59 1970-12-31 04:59:59 +1996-03-31 07:03:33.123 1996-03-31 07:03:33 1996-03-31 07:03:33 +2018-11-17 05:33:33.123 2018-11-17 05:33:33 2018-11-17 05:33:33 +2019-12-31 09:33:33.123 2019-12-31 09:33:33 2019-12-31 09:33:33 +2100-01-01 01:33:33.123 2100-01-01 01:33:33 2100-01-01 01:33:33 -- !query -select col, date_format(col, "姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV'") from v +select col, date_format(col, "姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV'"), to_char(col, "姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV'") from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV -1969-12-31 15:00:00 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV -1970-12-31 04:59:59.999 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV -1996-03-31 07:03:33.123 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV -2018-11-17 05:33:33.123 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV -2019-12-31 09:33:33.123 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV -2100-01-01 01:33:33.123 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV +1582-05-31 19:40:35.123 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV +1969-12-31 15:00:00 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV +1970-12-31 04:59:59.999 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV +1996-03-31 07:03:33.123 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV +2018-11-17 05:33:33.123 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV +2019-12-31 09:33:33.123 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV +2100-01-01 01:33:33.123 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV -- !query -select col, date_format(col, "''") from v +select col, date_format(col, "''"), to_char(col, "''") from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 ' -1969-12-31 15:00:00 ' -1970-12-31 04:59:59.999 ' -1996-03-31 07:03:33.123 ' -2018-11-17 05:33:33.123 ' -2019-12-31 09:33:33.123 ' -2100-01-01 01:33:33.123 ' +1582-05-31 19:40:35.123 ' ' +1969-12-31 15:00:00 ' ' +1970-12-31 04:59:59.999 ' ' +1996-03-31 07:03:33.123 ' ' +2018-11-17 05:33:33.123 ' ' +2019-12-31 09:33:33.123 ' ' +2100-01-01 01:33:33.123 ' ' -- !query -select col, date_format(col, '') from v +select col, date_format(col, ''), to_char(col, '') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 -1969-12-31 15:00:00 -1970-12-31 04:59:59.999 -1996-03-31 07:03:33.123 -2018-11-17 05:33:33.123 -2019-12-31 09:33:33.123 +1582-05-31 19:40:35.123 +1969-12-31 15:00:00 +1970-12-31 04:59:59.999 +1996-03-31 07:03:33.123 +2018-11-17 05:33:33.123 +2019-12-31 09:33:33.123 2100-01-01 01:33:33.123 From abc64a079caa6af2d059d587c3d7b8ef0ba7e961 Mon Sep 17 00:00:00 2001 From: Max Gekk Date: Fri, 18 Aug 2023 09:51:15 +0300 Subject: [PATCH 8/9] Add more tests for to_char and to_varchar --- .../datetime-formatting-legacy.sql.out | 137 +++-- .../datetime-formatting.sql.out | 137 +++-- .../sql-tests/inputs/datetime-formatting.sql | 65 ++- .../datetime-formatting-legacy.sql.out | 454 ++++++++------- .../results/datetime-formatting.sql.out | 550 +++++++++--------- 5 files changed, 717 insertions(+), 626 deletions(-) diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/datetime-formatting-legacy.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/datetime-formatting-legacy.sql.out index 376f007233552..bc33537b3a8e5 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/datetime-formatting-legacy.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/datetime-formatting-legacy.sql.out @@ -23,9 +23,9 @@ CreateViewCommand `v`, select col from values -- !query -select col, date_format(col, 'G GG GGG GGGG') from v +select col, date_format(col, 'G GG GGG GGGG'), to_char(col, 'G GG GGG GGGG'), to_varchar(col, 'G GG GGG GGGG') from v -- !query analysis -Project [col#x, date_format(col#x, G GG GGG GGGG, Some(America/Los_Angeles)) AS date_format(col, G GG GGG GGGG)#x] +Project [col#x, date_format(col#x, G GG GGG GGGG, Some(America/Los_Angeles)) AS date_format(col, G GG GGG GGGG)#x, date_format(col#x, G GG GGG GGGG, Some(America/Los_Angeles)) AS date_format(col, G GG GGG GGGG)#x, date_format(col#x, G GG GGG GGGG, Some(America/Los_Angeles)) AS date_format(col, G GG GGG GGGG)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -35,9 +35,9 @@ Project [col#x, date_format(col#x, G GG GGG GGGG, Some(America/Los_Angeles)) AS -- !query -select col, date_format(col, 'y yy yyy yyyy yyyyy yyyyyy') from v +select col, date_format(col, 'y yy yyy yyyy yyyyy yyyyyy'), to_char(col, 'y yy yyy yyyy yyyyy yyyyyy'), to_varchar(col, 'y yy yyy yyyy yyyyy yyyyyy') from v -- !query analysis -Project [col#x, date_format(col#x, y yy yyy yyyy yyyyy yyyyyy, Some(America/Los_Angeles)) AS date_format(col, y yy yyy yyyy yyyyy yyyyyy)#x] +Project [col#x, date_format(col#x, y yy yyy yyyy yyyyy yyyyyy, Some(America/Los_Angeles)) AS date_format(col, y yy yyy yyyy yyyyy yyyyyy)#x, date_format(col#x, y yy yyy yyyy yyyyy yyyyyy, Some(America/Los_Angeles)) AS date_format(col, y yy yyy yyyy yyyyy yyyyyy)#x, date_format(col#x, y yy yyy yyyy yyyyy yyyyyy, Some(America/Los_Angeles)) AS date_format(col, y yy yyy yyyy yyyyy yyyyyy)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -47,9 +47,9 @@ Project [col#x, date_format(col#x, y yy yyy yyyy yyyyy yyyyyy, Some(America/Los_ -- !query -select col, date_format(col, 'q qq') from v +select col, date_format(col, 'q qq'), to_char(col, 'q qq'), to_varchar(col, 'q qq') from v -- !query analysis -Project [col#x, date_format(col#x, q qq, Some(America/Los_Angeles)) AS date_format(col, q qq)#x] +Project [col#x, date_format(col#x, q qq, Some(America/Los_Angeles)) AS date_format(col, q qq)#x, date_format(col#x, q qq, Some(America/Los_Angeles)) AS date_format(col, q qq)#x, date_format(col#x, q qq, Some(America/Los_Angeles)) AS date_format(col, q qq)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -59,9 +59,9 @@ Project [col#x, date_format(col#x, q qq, Some(America/Los_Angeles)) AS date_form -- !query -select col, date_format(col, 'Q QQ QQQ QQQQ') from v +select col, date_format(col, 'Q QQ QQQ QQQQ'), to_char(col, 'Q QQ QQQ QQQQ'), to_varchar(col, 'Q QQ QQQ QQQQ') from v -- !query analysis -Project [col#x, date_format(col#x, Q QQ QQQ QQQQ, Some(America/Los_Angeles)) AS date_format(col, Q QQ QQQ QQQQ)#x] +Project [col#x, date_format(col#x, Q QQ QQQ QQQQ, Some(America/Los_Angeles)) AS date_format(col, Q QQ QQQ QQQQ)#x, date_format(col#x, Q QQ QQQ QQQQ, Some(America/Los_Angeles)) AS date_format(col, Q QQ QQQ QQQQ)#x, date_format(col#x, Q QQ QQQ QQQQ, Some(America/Los_Angeles)) AS date_format(col, Q QQ QQQ QQQQ)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -71,9 +71,9 @@ Project [col#x, date_format(col#x, Q QQ QQQ QQQQ, Some(America/Los_Angeles)) AS -- !query -select col, date_format(col, 'M MM MMM MMMM') from v +select col, date_format(col, 'M MM MMM MMMM'), to_char(col, 'M MM MMM MMMM'), to_varchar(col, 'M MM MMM MMMM') from v -- !query analysis -Project [col#x, date_format(col#x, M MM MMM MMMM, Some(America/Los_Angeles)) AS date_format(col, M MM MMM MMMM)#x] +Project [col#x, date_format(col#x, M MM MMM MMMM, Some(America/Los_Angeles)) AS date_format(col, M MM MMM MMMM)#x, date_format(col#x, M MM MMM MMMM, Some(America/Los_Angeles)) AS date_format(col, M MM MMM MMMM)#x, date_format(col#x, M MM MMM MMMM, Some(America/Los_Angeles)) AS date_format(col, M MM MMM MMMM)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -83,9 +83,9 @@ Project [col#x, date_format(col#x, M MM MMM MMMM, Some(America/Los_Angeles)) AS -- !query -select col, date_format(col, 'L LL') from v +select col, date_format(col, 'L LL'), to_char(col, 'L LL'), to_varchar(col, 'L LL') from v -- !query analysis -Project [col#x, date_format(col#x, L LL, Some(America/Los_Angeles)) AS date_format(col, L LL)#x] +Project [col#x, date_format(col#x, L LL, Some(America/Los_Angeles)) AS date_format(col, L LL)#x, date_format(col#x, L LL, Some(America/Los_Angeles)) AS date_format(col, L LL)#x, date_format(col#x, L LL, Some(America/Los_Angeles)) AS date_format(col, L LL)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -95,9 +95,9 @@ Project [col#x, date_format(col#x, L LL, Some(America/Los_Angeles)) AS date_form -- !query -select col, date_format(col, 'E EE EEE EEEE') from v +select col, date_format(col, 'E EE EEE EEEE'), to_char(col, 'E EE EEE EEEE'), to_varchar(col, 'E EE EEE EEEE') from v -- !query analysis -Project [col#x, date_format(col#x, E EE EEE EEEE, Some(America/Los_Angeles)) AS date_format(col, E EE EEE EEEE)#x] +Project [col#x, date_format(col#x, E EE EEE EEEE, Some(America/Los_Angeles)) AS date_format(col, E EE EEE EEEE)#x, date_format(col#x, E EE EEE EEEE, Some(America/Los_Angeles)) AS date_format(col, E EE EEE EEEE)#x, date_format(col#x, E EE EEE EEEE, Some(America/Los_Angeles)) AS date_format(col, E EE EEE EEEE)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -107,9 +107,9 @@ Project [col#x, date_format(col#x, E EE EEE EEEE, Some(America/Los_Angeles)) AS -- !query -select col, date_format(col, 'F') from v +select col, date_format(col, 'F'), to_char(col, 'F'), to_varchar(col, 'F') from v -- !query analysis -Project [col#x, date_format(col#x, F, Some(America/Los_Angeles)) AS date_format(col, F)#x] +Project [col#x, date_format(col#x, F, Some(America/Los_Angeles)) AS date_format(col, F)#x, date_format(col#x, F, Some(America/Los_Angeles)) AS date_format(col, F)#x, date_format(col#x, F, Some(America/Los_Angeles)) AS date_format(col, F)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -119,9 +119,9 @@ Project [col#x, date_format(col#x, F, Some(America/Los_Angeles)) AS date_format( -- !query -select col, date_format(col, 'd dd') from v +select col, date_format(col, 'd dd'), to_char(col, 'd dd'), to_varchar(col, 'd dd') from v -- !query analysis -Project [col#x, date_format(col#x, d dd, Some(America/Los_Angeles)) AS date_format(col, d dd)#x] +Project [col#x, date_format(col#x, d dd, Some(America/Los_Angeles)) AS date_format(col, d dd)#x, date_format(col#x, d dd, Some(America/Los_Angeles)) AS date_format(col, d dd)#x, date_format(col#x, d dd, Some(America/Los_Angeles)) AS date_format(col, d dd)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -131,15 +131,15 @@ Project [col#x, date_format(col#x, d dd, Some(America/Los_Angeles)) AS date_form -- !query -select col, date_format(col, 'DD') from v where col = timestamp '2100-01-01 01:33:33.123America/Los_Angeles' +select col, date_format(col, 'DD'), to_char(col, 'DD'), to_varchar(col, 'DD') from v where col = timestamp '2100-01-01 01:33:33.123America/Los_Angeles' -- !query analysis [Analyzer test output redacted due to nondeterminism] -- !query -select col, date_format(col, 'D DDD') from v +select col, date_format(col, 'D DDD'), to_char(col, 'D DDD'), to_varchar(col, 'D DDD') from v -- !query analysis -Project [col#x, date_format(col#x, D DDD, Some(America/Los_Angeles)) AS date_format(col, D DDD)#x] +Project [col#x, date_format(col#x, D DDD, Some(America/Los_Angeles)) AS date_format(col, D DDD)#x, date_format(col#x, D DDD, Some(America/Los_Angeles)) AS date_format(col, D DDD)#x, date_format(col#x, D DDD, Some(America/Los_Angeles)) AS date_format(col, D DDD)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -149,9 +149,9 @@ Project [col#x, date_format(col#x, D DDD, Some(America/Los_Angeles)) AS date_for -- !query -select col, date_format(col, 'H HH') from v +select col, date_format(col, 'H HH'), to_char(col, 'H HH'), to_varchar(col, 'H HH') from v -- !query analysis -Project [col#x, date_format(col#x, H HH, Some(America/Los_Angeles)) AS date_format(col, H HH)#x] +Project [col#x, date_format(col#x, H HH, Some(America/Los_Angeles)) AS date_format(col, H HH)#x, date_format(col#x, H HH, Some(America/Los_Angeles)) AS date_format(col, H HH)#x, date_format(col#x, H HH, Some(America/Los_Angeles)) AS date_format(col, H HH)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -161,9 +161,9 @@ Project [col#x, date_format(col#x, H HH, Some(America/Los_Angeles)) AS date_form -- !query -select col, date_format(col, 'h hh') from v +select col, date_format(col, 'h hh'), to_char(col, 'h hh'), to_varchar(col, 'h hh') from v -- !query analysis -Project [col#x, date_format(col#x, h hh, Some(America/Los_Angeles)) AS date_format(col, h hh)#x] +Project [col#x, date_format(col#x, h hh, Some(America/Los_Angeles)) AS date_format(col, h hh)#x, date_format(col#x, h hh, Some(America/Los_Angeles)) AS date_format(col, h hh)#x, date_format(col#x, h hh, Some(America/Los_Angeles)) AS date_format(col, h hh)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -173,9 +173,9 @@ Project [col#x, date_format(col#x, h hh, Some(America/Los_Angeles)) AS date_form -- !query -select col, date_format(col, 'k kk') from v +select col, date_format(col, 'k kk'), to_char(col, 'k kk'), to_varchar(col, 'k kk') from v -- !query analysis -Project [col#x, date_format(col#x, k kk, Some(America/Los_Angeles)) AS date_format(col, k kk)#x] +Project [col#x, date_format(col#x, k kk, Some(America/Los_Angeles)) AS date_format(col, k kk)#x, date_format(col#x, k kk, Some(America/Los_Angeles)) AS date_format(col, k kk)#x, date_format(col#x, k kk, Some(America/Los_Angeles)) AS date_format(col, k kk)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -185,9 +185,9 @@ Project [col#x, date_format(col#x, k kk, Some(America/Los_Angeles)) AS date_form -- !query -select col, date_format(col, 'K KK') from v +select col, date_format(col, 'K KK'), to_char(col, 'K KK'), to_varchar(col, 'K KK') from v -- !query analysis -Project [col#x, date_format(col#x, K KK, Some(America/Los_Angeles)) AS date_format(col, K KK)#x] +Project [col#x, date_format(col#x, K KK, Some(America/Los_Angeles)) AS date_format(col, K KK)#x, date_format(col#x, K KK, Some(America/Los_Angeles)) AS date_format(col, K KK)#x, date_format(col#x, K KK, Some(America/Los_Angeles)) AS date_format(col, K KK)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -197,9 +197,9 @@ Project [col#x, date_format(col#x, K KK, Some(America/Los_Angeles)) AS date_form -- !query -select col, date_format(col, 'm mm') from v +select col, date_format(col, 'm mm'), to_char(col, 'm mm'), to_varchar(col, 'm mm') from v -- !query analysis -Project [col#x, date_format(col#x, m mm, Some(America/Los_Angeles)) AS date_format(col, m mm)#x] +Project [col#x, date_format(col#x, m mm, Some(America/Los_Angeles)) AS date_format(col, m mm)#x, date_format(col#x, m mm, Some(America/Los_Angeles)) AS date_format(col, m mm)#x, date_format(col#x, m mm, Some(America/Los_Angeles)) AS date_format(col, m mm)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -209,9 +209,9 @@ Project [col#x, date_format(col#x, m mm, Some(America/Los_Angeles)) AS date_form -- !query -select col, date_format(col, 's ss') from v +select col, date_format(col, 's ss'), to_char(col, 's ss'), to_varchar(col, 's ss') from v -- !query analysis -Project [col#x, date_format(col#x, s ss, Some(America/Los_Angeles)) AS date_format(col, s ss)#x] +Project [col#x, date_format(col#x, s ss, Some(America/Los_Angeles)) AS date_format(col, s ss)#x, date_format(col#x, s ss, Some(America/Los_Angeles)) AS date_format(col, s ss)#x, date_format(col#x, s ss, Some(America/Los_Angeles)) AS date_format(col, s ss)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -221,9 +221,9 @@ Project [col#x, date_format(col#x, s ss, Some(America/Los_Angeles)) AS date_form -- !query -select col, date_format(col, 'S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS') from v +select col, date_format(col, 'S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS'), to_char(col, 'S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS'), to_varchar(col, 'S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS') from v -- !query analysis -Project [col#x, date_format(col#x, S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS, Some(America/Los_Angeles)) AS date_format(col, S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS)#x] +Project [col#x, date_format(col#x, S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS, Some(America/Los_Angeles)) AS date_format(col, S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS)#x, date_format(col#x, S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS, Some(America/Los_Angeles)) AS date_format(col, S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS)#x, date_format(col#x, S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS, Some(America/Los_Angeles)) AS date_format(col, S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -233,9 +233,9 @@ Project [col#x, date_format(col#x, S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS S -- !query -select col, date_format(col, 'a') from v +select col, date_format(col, 'a'), to_char(col, 'a'), to_varchar(col, 'a') from v -- !query analysis -Project [col#x, date_format(col#x, a, Some(America/Los_Angeles)) AS date_format(col, a)#x] +Project [col#x, date_format(col#x, a, Some(America/Los_Angeles)) AS date_format(col, a)#x, date_format(col#x, a, Some(America/Los_Angeles)) AS date_format(col, a)#x, date_format(col#x, a, Some(America/Los_Angeles)) AS date_format(col, a)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -245,9 +245,9 @@ Project [col#x, date_format(col#x, a, Some(America/Los_Angeles)) AS date_format( -- !query -select col, date_format(col, 'VV') from v +select col, date_format(col, 'VV'), to_char(col, 'VV'), to_varchar(col, 'VV') from v -- !query analysis -Project [col#x, date_format(col#x, VV, Some(America/Los_Angeles)) AS date_format(col, VV)#x] +Project [col#x, date_format(col#x, VV, Some(America/Los_Angeles)) AS date_format(col, VV)#x, date_format(col#x, VV, Some(America/Los_Angeles)) AS date_format(col, VV)#x, date_format(col#x, VV, Some(America/Los_Angeles)) AS date_format(col, VV)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -257,9 +257,9 @@ Project [col#x, date_format(col#x, VV, Some(America/Los_Angeles)) AS date_format -- !query -select col, date_format(col, 'z zz zzz zzzz') from v +select col, date_format(col, 'z zz zzz zzzz'), to_char(col, 'z zz zzz zzzz'), to_varchar(col, 'z zz zzz zzzz') from v -- !query analysis -Project [col#x, date_format(col#x, z zz zzz zzzz, Some(America/Los_Angeles)) AS date_format(col, z zz zzz zzzz)#x] +Project [col#x, date_format(col#x, z zz zzz zzzz, Some(America/Los_Angeles)) AS date_format(col, z zz zzz zzzz)#x, date_format(col#x, z zz zzz zzzz, Some(America/Los_Angeles)) AS date_format(col, z zz zzz zzzz)#x, date_format(col#x, z zz zzz zzzz, Some(America/Los_Angeles)) AS date_format(col, z zz zzz zzzz)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -269,9 +269,9 @@ Project [col#x, date_format(col#x, z zz zzz zzzz, Some(America/Los_Angeles)) AS -- !query -select col, date_format(col, 'X XX XXX') from v +select col, date_format(col, 'X XX XXX'), to_char(col, 'X XX XXX'), to_varchar(col, 'X XX XXX') from v -- !query analysis -Project [col#x, date_format(col#x, X XX XXX, Some(America/Los_Angeles)) AS date_format(col, X XX XXX)#x] +Project [col#x, date_format(col#x, X XX XXX, Some(America/Los_Angeles)) AS date_format(col, X XX XXX)#x, date_format(col#x, X XX XXX, Some(America/Los_Angeles)) AS date_format(col, X XX XXX)#x, date_format(col#x, X XX XXX, Some(America/Los_Angeles)) AS date_format(col, X XX XXX)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -281,9 +281,9 @@ Project [col#x, date_format(col#x, X XX XXX, Some(America/Los_Angeles)) AS date_ -- !query -select col, date_format(col, 'XXXX XXXXX') from v +select col, date_format(col, 'XXXX XXXXX'), to_char(col, 'XXXX XXXXX'), to_varchar(col, 'XXXX XXXXX') from v -- !query analysis -Project [col#x, date_format(col#x, XXXX XXXXX, Some(America/Los_Angeles)) AS date_format(col, XXXX XXXXX)#x] +Project [col#x, date_format(col#x, XXXX XXXXX, Some(America/Los_Angeles)) AS date_format(col, XXXX XXXXX)#x, date_format(col#x, XXXX XXXXX, Some(America/Los_Angeles)) AS date_format(col, XXXX XXXXX)#x, date_format(col#x, XXXX XXXXX, Some(America/Los_Angeles)) AS date_format(col, XXXX XXXXX)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -293,9 +293,9 @@ Project [col#x, date_format(col#x, XXXX XXXXX, Some(America/Los_Angeles)) AS dat -- !query -select col, date_format(col, 'Z ZZ ZZZ ZZZZ ZZZZZ') from v +select col, date_format(col, 'Z ZZ ZZZ ZZZZ ZZZZZ'), to_char(col, 'Z ZZ ZZZ ZZZZ ZZZZZ'), to_varchar(col, 'Z ZZ ZZZ ZZZZ ZZZZZ') from v -- !query analysis -Project [col#x, date_format(col#x, Z ZZ ZZZ ZZZZ ZZZZZ, Some(America/Los_Angeles)) AS date_format(col, Z ZZ ZZZ ZZZZ ZZZZZ)#x] +Project [col#x, date_format(col#x, Z ZZ ZZZ ZZZZ ZZZZZ, Some(America/Los_Angeles)) AS date_format(col, Z ZZ ZZZ ZZZZ ZZZZZ)#x, date_format(col#x, Z ZZ ZZZ ZZZZ ZZZZZ, Some(America/Los_Angeles)) AS date_format(col, Z ZZ ZZZ ZZZZ ZZZZZ)#x, date_format(col#x, Z ZZ ZZZ ZZZZ ZZZZZ, Some(America/Los_Angeles)) AS date_format(col, Z ZZ ZZZ ZZZZ ZZZZZ)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -305,9 +305,9 @@ Project [col#x, date_format(col#x, Z ZZ ZZZ ZZZZ ZZZZZ, Some(America/Los_Angeles -- !query -select col, date_format(col, 'O OOOO') from v +select col, date_format(col, 'O OOOO'), to_char(col, 'O OOOO'), to_varchar(col, 'O OOOO') from v -- !query analysis -Project [col#x, date_format(col#x, O OOOO, Some(America/Los_Angeles)) AS date_format(col, O OOOO)#x] +Project [col#x, date_format(col#x, O OOOO, Some(America/Los_Angeles)) AS date_format(col, O OOOO)#x, date_format(col#x, O OOOO, Some(America/Los_Angeles)) AS date_format(col, O OOOO)#x, date_format(col#x, O OOOO, Some(America/Los_Angeles)) AS date_format(col, O OOOO)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -317,9 +317,9 @@ Project [col#x, date_format(col#x, O OOOO, Some(America/Los_Angeles)) AS date_fo -- !query -select col, date_format(col, 'x xx xxx xxxx xxxx xxxxx') from v +select col, date_format(col, 'x xx xxx xxxx xxxx xxxxx'), to_char(col, 'x xx xxx xxxx xxxx xxxxx'), to_varchar(col, 'x xx xxx xxxx xxxx xxxxx') from v -- !query analysis -Project [col#x, date_format(col#x, x xx xxx xxxx xxxx xxxxx, Some(America/Los_Angeles)) AS date_format(col, x xx xxx xxxx xxxx xxxxx)#x] +Project [col#x, date_format(col#x, x xx xxx xxxx xxxx xxxxx, Some(America/Los_Angeles)) AS date_format(col, x xx xxx xxxx xxxx xxxxx)#x, date_format(col#x, x xx xxx xxxx xxxx xxxxx, Some(America/Los_Angeles)) AS date_format(col, x xx xxx xxxx xxxx xxxxx)#x, date_format(col#x, x xx xxx xxxx xxxx xxxxx, Some(America/Los_Angeles)) AS date_format(col, x xx xxx xxxx xxxx xxxxx)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -329,9 +329,9 @@ Project [col#x, date_format(col#x, x xx xxx xxxx xxxx xxxxx, Some(America/Los_An -- !query -select col, date_format(col, '[yyyy-MM-dd HH:mm:ss]') from v +select col, date_format(col, '[yyyy-MM-dd HH:mm:ss]'), to_char(col, '[yyyy-MM-dd HH:mm:ss]'), to_varchar(col, '[yyyy-MM-dd HH:mm:ss]') from v -- !query analysis -Project [col#x, date_format(col#x, [yyyy-MM-dd HH:mm:ss], Some(America/Los_Angeles)) AS date_format(col, [yyyy-MM-dd HH:mm:ss])#x] +Project [col#x, date_format(col#x, [yyyy-MM-dd HH:mm:ss], Some(America/Los_Angeles)) AS date_format(col, [yyyy-MM-dd HH:mm:ss])#x, date_format(col#x, [yyyy-MM-dd HH:mm:ss], Some(America/Los_Angeles)) AS date_format(col, [yyyy-MM-dd HH:mm:ss])#x, date_format(col#x, [yyyy-MM-dd HH:mm:ss], Some(America/Los_Angeles)) AS date_format(col, [yyyy-MM-dd HH:mm:ss])#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -341,9 +341,9 @@ Project [col#x, date_format(col#x, [yyyy-MM-dd HH:mm:ss], Some(America/Los_Angel -- !query -select col, date_format(col, "姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV'") from v +select col, date_format(col, "姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV'"), to_char(col, "姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV'"), to_varchar(col, "姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV'") from v -- !query analysis -Project [col#x, date_format(col#x, 姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV', Some(America/Los_Angeles)) AS date_format(col, 姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV')#x] +Project [col#x, date_format(col#x, 姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV', Some(America/Los_Angeles)) AS date_format(col, 姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV')#x, date_format(col#x, 姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV', Some(America/Los_Angeles)) AS date_format(col, 姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV')#x, date_format(col#x, 姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV', Some(America/Los_Angeles)) AS date_format(col, 姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV')#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -353,9 +353,9 @@ Project [col#x, date_format(col#x, 姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV', Some(Ame -- !query -select col, date_format(col, "''") from v +select col, date_format(col, "''"), to_char(col, "''"), to_varchar(col, "''") from v -- !query analysis -Project [col#x, date_format(col#x, '', Some(America/Los_Angeles)) AS date_format(col, '')#x] +Project [col#x, date_format(col#x, '', Some(America/Los_Angeles)) AS date_format(col, '')#x, date_format(col#x, '', Some(America/Los_Angeles)) AS date_format(col, '')#x, date_format(col#x, '', Some(America/Los_Angeles)) AS date_format(col, '')#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -365,12 +365,31 @@ Project [col#x, date_format(col#x, '', Some(America/Los_Angeles)) AS date_format -- !query -select col, date_format(col, '') from v +select col, date_format(col, ''), to_char(col, ''), to_varchar(col, '') from v -- !query analysis -Project [col#x, date_format(col#x, , Some(America/Los_Angeles)) AS date_format(col, )#x] +Project [col#x, date_format(col#x, , Some(America/Los_Angeles)) AS date_format(col, )#x, date_format(col#x, , Some(America/Los_Angeles)) AS date_format(col, )#x, date_format(col#x, , Some(America/Los_Angeles)) AS date_format(col, )#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] +- Project [col#x] +- SubqueryAlias t +- LocalRelation [col#x] + + +-- !query +select date_format(date'2023-08-18', 'yyyy-MM-dd'), to_char(date'2023-08-18', 'yyyy-MM-dd'), to_varchar(date'2023-08-18', 'yyyy-MM-dd') +-- !query analysis +[Analyzer test output redacted due to nondeterminism] + + +-- !query +select date_format(timestamp_ltz'2023-08-18 09:13:14.123456Z', 'yyyy-MM-dd HH:mm:ss.SSSSSSZ'), to_char(timestamp_ltz'2023-08-18 09:13:14.123456Z', 'yyyy-MM-dd HH:mm:ss.SSSSSSZ'), to_varchar(timestamp_ltz'2023-08-18 09:13:14.123456Z', 'yyyy-MM-dd HH:mm:ss.SSSSSSZ') +-- !query analysis +[Analyzer test output redacted due to nondeterminism] + + +-- !query +select date_format(timestamp_ntz'2023-08-18 09:13:14.123456', 'yyyy-MM-dd HH:mm:ss.SSSSSS'), to_char(timestamp_ntz'2023-08-18 09:13:14.123456', 'yyyy-MM-dd HH:mm:ss.SSSSSS'), to_varchar(timestamp_ntz'2023-08-18 09:13:14.123456', 'yyyy-MM-dd HH:mm:ss.SSSSSS') +-- !query analysis +Project [date_format(cast(2023-08-18 09:13:14.123456 as timestamp), yyyy-MM-dd HH:mm:ss.SSSSSS, Some(America/Los_Angeles)) AS date_format(TIMESTAMP_NTZ '2023-08-18 09:13:14.123456', yyyy-MM-dd HH:mm:ss.SSSSSS)#x, date_format(cast(2023-08-18 09:13:14.123456 as timestamp), yyyy-MM-dd HH:mm:ss.SSSSSS, Some(America/Los_Angeles)) AS date_format(TIMESTAMP_NTZ '2023-08-18 09:13:14.123456', yyyy-MM-dd HH:mm:ss.SSSSSS)#x, date_format(cast(2023-08-18 09:13:14.123456 as timestamp), yyyy-MM-dd HH:mm:ss.SSSSSS, Some(America/Los_Angeles)) AS date_format(TIMESTAMP_NTZ '2023-08-18 09:13:14.123456', yyyy-MM-dd HH:mm:ss.SSSSSS)#x] ++- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/datetime-formatting.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/datetime-formatting.sql.out index 1135b0f500e4d..bc33537b3a8e5 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/datetime-formatting.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/datetime-formatting.sql.out @@ -23,9 +23,9 @@ CreateViewCommand `v`, select col from values -- !query -select col, date_format(col, 'G GG GGG GGGG'), to_char(col, 'G GG GGG GGGG') from v +select col, date_format(col, 'G GG GGG GGGG'), to_char(col, 'G GG GGG GGGG'), to_varchar(col, 'G GG GGG GGGG') from v -- !query analysis -Project [col#x, date_format(col#x, G GG GGG GGGG, Some(America/Los_Angeles)) AS date_format(col, G GG GGG GGGG)#x, date_format(col#x, G GG GGG GGGG, Some(America/Los_Angeles)) AS date_format(col, G GG GGG GGGG)#x] +Project [col#x, date_format(col#x, G GG GGG GGGG, Some(America/Los_Angeles)) AS date_format(col, G GG GGG GGGG)#x, date_format(col#x, G GG GGG GGGG, Some(America/Los_Angeles)) AS date_format(col, G GG GGG GGGG)#x, date_format(col#x, G GG GGG GGGG, Some(America/Los_Angeles)) AS date_format(col, G GG GGG GGGG)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -35,9 +35,9 @@ Project [col#x, date_format(col#x, G GG GGG GGGG, Some(America/Los_Angeles)) AS -- !query -select col, date_format(col, 'y yy yyy yyyy yyyyy yyyyyy'), to_char(col, 'y yy yyy yyyy yyyyy yyyyyy') from v +select col, date_format(col, 'y yy yyy yyyy yyyyy yyyyyy'), to_char(col, 'y yy yyy yyyy yyyyy yyyyyy'), to_varchar(col, 'y yy yyy yyyy yyyyy yyyyyy') from v -- !query analysis -Project [col#x, date_format(col#x, y yy yyy yyyy yyyyy yyyyyy, Some(America/Los_Angeles)) AS date_format(col, y yy yyy yyyy yyyyy yyyyyy)#x, date_format(col#x, y yy yyy yyyy yyyyy yyyyyy, Some(America/Los_Angeles)) AS date_format(col, y yy yyy yyyy yyyyy yyyyyy)#x] +Project [col#x, date_format(col#x, y yy yyy yyyy yyyyy yyyyyy, Some(America/Los_Angeles)) AS date_format(col, y yy yyy yyyy yyyyy yyyyyy)#x, date_format(col#x, y yy yyy yyyy yyyyy yyyyyy, Some(America/Los_Angeles)) AS date_format(col, y yy yyy yyyy yyyyy yyyyyy)#x, date_format(col#x, y yy yyy yyyy yyyyy yyyyyy, Some(America/Los_Angeles)) AS date_format(col, y yy yyy yyyy yyyyy yyyyyy)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -47,9 +47,9 @@ Project [col#x, date_format(col#x, y yy yyy yyyy yyyyy yyyyyy, Some(America/Los_ -- !query -select col, date_format(col, 'q qq'), to_char(col, 'q qq') from v +select col, date_format(col, 'q qq'), to_char(col, 'q qq'), to_varchar(col, 'q qq') from v -- !query analysis -Project [col#x, date_format(col#x, q qq, Some(America/Los_Angeles)) AS date_format(col, q qq)#x, date_format(col#x, q qq, Some(America/Los_Angeles)) AS date_format(col, q qq)#x] +Project [col#x, date_format(col#x, q qq, Some(America/Los_Angeles)) AS date_format(col, q qq)#x, date_format(col#x, q qq, Some(America/Los_Angeles)) AS date_format(col, q qq)#x, date_format(col#x, q qq, Some(America/Los_Angeles)) AS date_format(col, q qq)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -59,9 +59,9 @@ Project [col#x, date_format(col#x, q qq, Some(America/Los_Angeles)) AS date_form -- !query -select col, date_format(col, 'Q QQ QQQ QQQQ'), to_char(col, 'Q QQ QQQ QQQQ') from v +select col, date_format(col, 'Q QQ QQQ QQQQ'), to_char(col, 'Q QQ QQQ QQQQ'), to_varchar(col, 'Q QQ QQQ QQQQ') from v -- !query analysis -Project [col#x, date_format(col#x, Q QQ QQQ QQQQ, Some(America/Los_Angeles)) AS date_format(col, Q QQ QQQ QQQQ)#x, date_format(col#x, Q QQ QQQ QQQQ, Some(America/Los_Angeles)) AS date_format(col, Q QQ QQQ QQQQ)#x] +Project [col#x, date_format(col#x, Q QQ QQQ QQQQ, Some(America/Los_Angeles)) AS date_format(col, Q QQ QQQ QQQQ)#x, date_format(col#x, Q QQ QQQ QQQQ, Some(America/Los_Angeles)) AS date_format(col, Q QQ QQQ QQQQ)#x, date_format(col#x, Q QQ QQQ QQQQ, Some(America/Los_Angeles)) AS date_format(col, Q QQ QQQ QQQQ)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -71,9 +71,9 @@ Project [col#x, date_format(col#x, Q QQ QQQ QQQQ, Some(America/Los_Angeles)) AS -- !query -select col, date_format(col, 'M MM MMM MMMM'), to_char(col, 'M MM MMM MMMM') from v +select col, date_format(col, 'M MM MMM MMMM'), to_char(col, 'M MM MMM MMMM'), to_varchar(col, 'M MM MMM MMMM') from v -- !query analysis -Project [col#x, date_format(col#x, M MM MMM MMMM, Some(America/Los_Angeles)) AS date_format(col, M MM MMM MMMM)#x, date_format(col#x, M MM MMM MMMM, Some(America/Los_Angeles)) AS date_format(col, M MM MMM MMMM)#x] +Project [col#x, date_format(col#x, M MM MMM MMMM, Some(America/Los_Angeles)) AS date_format(col, M MM MMM MMMM)#x, date_format(col#x, M MM MMM MMMM, Some(America/Los_Angeles)) AS date_format(col, M MM MMM MMMM)#x, date_format(col#x, M MM MMM MMMM, Some(America/Los_Angeles)) AS date_format(col, M MM MMM MMMM)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -83,9 +83,9 @@ Project [col#x, date_format(col#x, M MM MMM MMMM, Some(America/Los_Angeles)) AS -- !query -select col, date_format(col, 'L LL'), to_char(col, 'L LL') from v +select col, date_format(col, 'L LL'), to_char(col, 'L LL'), to_varchar(col, 'L LL') from v -- !query analysis -Project [col#x, date_format(col#x, L LL, Some(America/Los_Angeles)) AS date_format(col, L LL)#x, date_format(col#x, L LL, Some(America/Los_Angeles)) AS date_format(col, L LL)#x] +Project [col#x, date_format(col#x, L LL, Some(America/Los_Angeles)) AS date_format(col, L LL)#x, date_format(col#x, L LL, Some(America/Los_Angeles)) AS date_format(col, L LL)#x, date_format(col#x, L LL, Some(America/Los_Angeles)) AS date_format(col, L LL)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -95,9 +95,9 @@ Project [col#x, date_format(col#x, L LL, Some(America/Los_Angeles)) AS date_form -- !query -select col, date_format(col, 'E EE EEE EEEE'), to_char(col, 'E EE EEE EEEE') from v +select col, date_format(col, 'E EE EEE EEEE'), to_char(col, 'E EE EEE EEEE'), to_varchar(col, 'E EE EEE EEEE') from v -- !query analysis -Project [col#x, date_format(col#x, E EE EEE EEEE, Some(America/Los_Angeles)) AS date_format(col, E EE EEE EEEE)#x, date_format(col#x, E EE EEE EEEE, Some(America/Los_Angeles)) AS date_format(col, E EE EEE EEEE)#x] +Project [col#x, date_format(col#x, E EE EEE EEEE, Some(America/Los_Angeles)) AS date_format(col, E EE EEE EEEE)#x, date_format(col#x, E EE EEE EEEE, Some(America/Los_Angeles)) AS date_format(col, E EE EEE EEEE)#x, date_format(col#x, E EE EEE EEEE, Some(America/Los_Angeles)) AS date_format(col, E EE EEE EEEE)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -107,9 +107,9 @@ Project [col#x, date_format(col#x, E EE EEE EEEE, Some(America/Los_Angeles)) AS -- !query -select col, date_format(col, 'F'), to_char(col, 'F') from v +select col, date_format(col, 'F'), to_char(col, 'F'), to_varchar(col, 'F') from v -- !query analysis -Project [col#x, date_format(col#x, F, Some(America/Los_Angeles)) AS date_format(col, F)#x, date_format(col#x, F, Some(America/Los_Angeles)) AS date_format(col, F)#x] +Project [col#x, date_format(col#x, F, Some(America/Los_Angeles)) AS date_format(col, F)#x, date_format(col#x, F, Some(America/Los_Angeles)) AS date_format(col, F)#x, date_format(col#x, F, Some(America/Los_Angeles)) AS date_format(col, F)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -119,9 +119,9 @@ Project [col#x, date_format(col#x, F, Some(America/Los_Angeles)) AS date_format( -- !query -select col, date_format(col, 'd dd'), to_char(col, 'd dd') from v +select col, date_format(col, 'd dd'), to_char(col, 'd dd'), to_varchar(col, 'd dd') from v -- !query analysis -Project [col#x, date_format(col#x, d dd, Some(America/Los_Angeles)) AS date_format(col, d dd)#x, date_format(col#x, d dd, Some(America/Los_Angeles)) AS date_format(col, d dd)#x] +Project [col#x, date_format(col#x, d dd, Some(America/Los_Angeles)) AS date_format(col, d dd)#x, date_format(col#x, d dd, Some(America/Los_Angeles)) AS date_format(col, d dd)#x, date_format(col#x, d dd, Some(America/Los_Angeles)) AS date_format(col, d dd)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -131,15 +131,15 @@ Project [col#x, date_format(col#x, d dd, Some(America/Los_Angeles)) AS date_form -- !query -select col, date_format(col, 'DD'), to_char(col, 'DD') from v where col = timestamp '2100-01-01 01:33:33.123America/Los_Angeles' +select col, date_format(col, 'DD'), to_char(col, 'DD'), to_varchar(col, 'DD') from v where col = timestamp '2100-01-01 01:33:33.123America/Los_Angeles' -- !query analysis [Analyzer test output redacted due to nondeterminism] -- !query -select col, date_format(col, 'D DDD'), to_char(col, 'D DDD') from v +select col, date_format(col, 'D DDD'), to_char(col, 'D DDD'), to_varchar(col, 'D DDD') from v -- !query analysis -Project [col#x, date_format(col#x, D DDD, Some(America/Los_Angeles)) AS date_format(col, D DDD)#x, date_format(col#x, D DDD, Some(America/Los_Angeles)) AS date_format(col, D DDD)#x] +Project [col#x, date_format(col#x, D DDD, Some(America/Los_Angeles)) AS date_format(col, D DDD)#x, date_format(col#x, D DDD, Some(America/Los_Angeles)) AS date_format(col, D DDD)#x, date_format(col#x, D DDD, Some(America/Los_Angeles)) AS date_format(col, D DDD)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -149,9 +149,9 @@ Project [col#x, date_format(col#x, D DDD, Some(America/Los_Angeles)) AS date_for -- !query -select col, date_format(col, 'H HH'), to_char(col, 'H HH') from v +select col, date_format(col, 'H HH'), to_char(col, 'H HH'), to_varchar(col, 'H HH') from v -- !query analysis -Project [col#x, date_format(col#x, H HH, Some(America/Los_Angeles)) AS date_format(col, H HH)#x, date_format(col#x, H HH, Some(America/Los_Angeles)) AS date_format(col, H HH)#x] +Project [col#x, date_format(col#x, H HH, Some(America/Los_Angeles)) AS date_format(col, H HH)#x, date_format(col#x, H HH, Some(America/Los_Angeles)) AS date_format(col, H HH)#x, date_format(col#x, H HH, Some(America/Los_Angeles)) AS date_format(col, H HH)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -161,9 +161,9 @@ Project [col#x, date_format(col#x, H HH, Some(America/Los_Angeles)) AS date_form -- !query -select col, date_format(col, 'h hh'), to_char(col, 'h hh') from v +select col, date_format(col, 'h hh'), to_char(col, 'h hh'), to_varchar(col, 'h hh') from v -- !query analysis -Project [col#x, date_format(col#x, h hh, Some(America/Los_Angeles)) AS date_format(col, h hh)#x, date_format(col#x, h hh, Some(America/Los_Angeles)) AS date_format(col, h hh)#x] +Project [col#x, date_format(col#x, h hh, Some(America/Los_Angeles)) AS date_format(col, h hh)#x, date_format(col#x, h hh, Some(America/Los_Angeles)) AS date_format(col, h hh)#x, date_format(col#x, h hh, Some(America/Los_Angeles)) AS date_format(col, h hh)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -173,9 +173,9 @@ Project [col#x, date_format(col#x, h hh, Some(America/Los_Angeles)) AS date_form -- !query -select col, date_format(col, 'k kk'), to_char(col, 'k kk') from v +select col, date_format(col, 'k kk'), to_char(col, 'k kk'), to_varchar(col, 'k kk') from v -- !query analysis -Project [col#x, date_format(col#x, k kk, Some(America/Los_Angeles)) AS date_format(col, k kk)#x, date_format(col#x, k kk, Some(America/Los_Angeles)) AS date_format(col, k kk)#x] +Project [col#x, date_format(col#x, k kk, Some(America/Los_Angeles)) AS date_format(col, k kk)#x, date_format(col#x, k kk, Some(America/Los_Angeles)) AS date_format(col, k kk)#x, date_format(col#x, k kk, Some(America/Los_Angeles)) AS date_format(col, k kk)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -185,9 +185,9 @@ Project [col#x, date_format(col#x, k kk, Some(America/Los_Angeles)) AS date_form -- !query -select col, date_format(col, 'K KK'), to_char(col, 'K KK') from v +select col, date_format(col, 'K KK'), to_char(col, 'K KK'), to_varchar(col, 'K KK') from v -- !query analysis -Project [col#x, date_format(col#x, K KK, Some(America/Los_Angeles)) AS date_format(col, K KK)#x, date_format(col#x, K KK, Some(America/Los_Angeles)) AS date_format(col, K KK)#x] +Project [col#x, date_format(col#x, K KK, Some(America/Los_Angeles)) AS date_format(col, K KK)#x, date_format(col#x, K KK, Some(America/Los_Angeles)) AS date_format(col, K KK)#x, date_format(col#x, K KK, Some(America/Los_Angeles)) AS date_format(col, K KK)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -197,9 +197,9 @@ Project [col#x, date_format(col#x, K KK, Some(America/Los_Angeles)) AS date_form -- !query -select col, date_format(col, 'm mm'), to_char(col, 'm mm') from v +select col, date_format(col, 'm mm'), to_char(col, 'm mm'), to_varchar(col, 'm mm') from v -- !query analysis -Project [col#x, date_format(col#x, m mm, Some(America/Los_Angeles)) AS date_format(col, m mm)#x, date_format(col#x, m mm, Some(America/Los_Angeles)) AS date_format(col, m mm)#x] +Project [col#x, date_format(col#x, m mm, Some(America/Los_Angeles)) AS date_format(col, m mm)#x, date_format(col#x, m mm, Some(America/Los_Angeles)) AS date_format(col, m mm)#x, date_format(col#x, m mm, Some(America/Los_Angeles)) AS date_format(col, m mm)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -209,9 +209,9 @@ Project [col#x, date_format(col#x, m mm, Some(America/Los_Angeles)) AS date_form -- !query -select col, date_format(col, 's ss'), to_char(col, 's ss') from v +select col, date_format(col, 's ss'), to_char(col, 's ss'), to_varchar(col, 's ss') from v -- !query analysis -Project [col#x, date_format(col#x, s ss, Some(America/Los_Angeles)) AS date_format(col, s ss)#x, date_format(col#x, s ss, Some(America/Los_Angeles)) AS date_format(col, s ss)#x] +Project [col#x, date_format(col#x, s ss, Some(America/Los_Angeles)) AS date_format(col, s ss)#x, date_format(col#x, s ss, Some(America/Los_Angeles)) AS date_format(col, s ss)#x, date_format(col#x, s ss, Some(America/Los_Angeles)) AS date_format(col, s ss)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -221,9 +221,9 @@ Project [col#x, date_format(col#x, s ss, Some(America/Los_Angeles)) AS date_form -- !query -select col, date_format(col, 'S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS'), to_char(col, 'S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS') from v +select col, date_format(col, 'S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS'), to_char(col, 'S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS'), to_varchar(col, 'S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS') from v -- !query analysis -Project [col#x, date_format(col#x, S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS, Some(America/Los_Angeles)) AS date_format(col, S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS)#x, date_format(col#x, S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS, Some(America/Los_Angeles)) AS date_format(col, S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS)#x] +Project [col#x, date_format(col#x, S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS, Some(America/Los_Angeles)) AS date_format(col, S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS)#x, date_format(col#x, S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS, Some(America/Los_Angeles)) AS date_format(col, S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS)#x, date_format(col#x, S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS, Some(America/Los_Angeles)) AS date_format(col, S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -233,9 +233,9 @@ Project [col#x, date_format(col#x, S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS S -- !query -select col, date_format(col, 'a'), to_char(col, 'a') from v +select col, date_format(col, 'a'), to_char(col, 'a'), to_varchar(col, 'a') from v -- !query analysis -Project [col#x, date_format(col#x, a, Some(America/Los_Angeles)) AS date_format(col, a)#x, date_format(col#x, a, Some(America/Los_Angeles)) AS date_format(col, a)#x] +Project [col#x, date_format(col#x, a, Some(America/Los_Angeles)) AS date_format(col, a)#x, date_format(col#x, a, Some(America/Los_Angeles)) AS date_format(col, a)#x, date_format(col#x, a, Some(America/Los_Angeles)) AS date_format(col, a)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -245,9 +245,9 @@ Project [col#x, date_format(col#x, a, Some(America/Los_Angeles)) AS date_format( -- !query -select col, date_format(col, 'VV'), to_char(col, 'VV') from v +select col, date_format(col, 'VV'), to_char(col, 'VV'), to_varchar(col, 'VV') from v -- !query analysis -Project [col#x, date_format(col#x, VV, Some(America/Los_Angeles)) AS date_format(col, VV)#x, date_format(col#x, VV, Some(America/Los_Angeles)) AS date_format(col, VV)#x] +Project [col#x, date_format(col#x, VV, Some(America/Los_Angeles)) AS date_format(col, VV)#x, date_format(col#x, VV, Some(America/Los_Angeles)) AS date_format(col, VV)#x, date_format(col#x, VV, Some(America/Los_Angeles)) AS date_format(col, VV)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -257,9 +257,9 @@ Project [col#x, date_format(col#x, VV, Some(America/Los_Angeles)) AS date_format -- !query -select col, date_format(col, 'z zz zzz zzzz'), to_char(col, 'z zz zzz zzzz') from v +select col, date_format(col, 'z zz zzz zzzz'), to_char(col, 'z zz zzz zzzz'), to_varchar(col, 'z zz zzz zzzz') from v -- !query analysis -Project [col#x, date_format(col#x, z zz zzz zzzz, Some(America/Los_Angeles)) AS date_format(col, z zz zzz zzzz)#x, date_format(col#x, z zz zzz zzzz, Some(America/Los_Angeles)) AS date_format(col, z zz zzz zzzz)#x] +Project [col#x, date_format(col#x, z zz zzz zzzz, Some(America/Los_Angeles)) AS date_format(col, z zz zzz zzzz)#x, date_format(col#x, z zz zzz zzzz, Some(America/Los_Angeles)) AS date_format(col, z zz zzz zzzz)#x, date_format(col#x, z zz zzz zzzz, Some(America/Los_Angeles)) AS date_format(col, z zz zzz zzzz)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -269,9 +269,9 @@ Project [col#x, date_format(col#x, z zz zzz zzzz, Some(America/Los_Angeles)) AS -- !query -select col, date_format(col, 'X XX XXX'), to_char(col, 'X XX XXX') from v +select col, date_format(col, 'X XX XXX'), to_char(col, 'X XX XXX'), to_varchar(col, 'X XX XXX') from v -- !query analysis -Project [col#x, date_format(col#x, X XX XXX, Some(America/Los_Angeles)) AS date_format(col, X XX XXX)#x, date_format(col#x, X XX XXX, Some(America/Los_Angeles)) AS date_format(col, X XX XXX)#x] +Project [col#x, date_format(col#x, X XX XXX, Some(America/Los_Angeles)) AS date_format(col, X XX XXX)#x, date_format(col#x, X XX XXX, Some(America/Los_Angeles)) AS date_format(col, X XX XXX)#x, date_format(col#x, X XX XXX, Some(America/Los_Angeles)) AS date_format(col, X XX XXX)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -281,9 +281,9 @@ Project [col#x, date_format(col#x, X XX XXX, Some(America/Los_Angeles)) AS date_ -- !query -select col, date_format(col, 'XXXX XXXXX'), to_char(col, 'XXXX XXXXX') from v +select col, date_format(col, 'XXXX XXXXX'), to_char(col, 'XXXX XXXXX'), to_varchar(col, 'XXXX XXXXX') from v -- !query analysis -Project [col#x, date_format(col#x, XXXX XXXXX, Some(America/Los_Angeles)) AS date_format(col, XXXX XXXXX)#x, date_format(col#x, XXXX XXXXX, Some(America/Los_Angeles)) AS date_format(col, XXXX XXXXX)#x] +Project [col#x, date_format(col#x, XXXX XXXXX, Some(America/Los_Angeles)) AS date_format(col, XXXX XXXXX)#x, date_format(col#x, XXXX XXXXX, Some(America/Los_Angeles)) AS date_format(col, XXXX XXXXX)#x, date_format(col#x, XXXX XXXXX, Some(America/Los_Angeles)) AS date_format(col, XXXX XXXXX)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -293,9 +293,9 @@ Project [col#x, date_format(col#x, XXXX XXXXX, Some(America/Los_Angeles)) AS dat -- !query -select col, date_format(col, 'Z ZZ ZZZ ZZZZ ZZZZZ'), to_char(col, 'Z ZZ ZZZ ZZZZ ZZZZZ') from v +select col, date_format(col, 'Z ZZ ZZZ ZZZZ ZZZZZ'), to_char(col, 'Z ZZ ZZZ ZZZZ ZZZZZ'), to_varchar(col, 'Z ZZ ZZZ ZZZZ ZZZZZ') from v -- !query analysis -Project [col#x, date_format(col#x, Z ZZ ZZZ ZZZZ ZZZZZ, Some(America/Los_Angeles)) AS date_format(col, Z ZZ ZZZ ZZZZ ZZZZZ)#x, date_format(col#x, Z ZZ ZZZ ZZZZ ZZZZZ, Some(America/Los_Angeles)) AS date_format(col, Z ZZ ZZZ ZZZZ ZZZZZ)#x] +Project [col#x, date_format(col#x, Z ZZ ZZZ ZZZZ ZZZZZ, Some(America/Los_Angeles)) AS date_format(col, Z ZZ ZZZ ZZZZ ZZZZZ)#x, date_format(col#x, Z ZZ ZZZ ZZZZ ZZZZZ, Some(America/Los_Angeles)) AS date_format(col, Z ZZ ZZZ ZZZZ ZZZZZ)#x, date_format(col#x, Z ZZ ZZZ ZZZZ ZZZZZ, Some(America/Los_Angeles)) AS date_format(col, Z ZZ ZZZ ZZZZ ZZZZZ)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -305,9 +305,9 @@ Project [col#x, date_format(col#x, Z ZZ ZZZ ZZZZ ZZZZZ, Some(America/Los_Angeles -- !query -select col, date_format(col, 'O OOOO'), to_char(col, 'O OOOO') from v +select col, date_format(col, 'O OOOO'), to_char(col, 'O OOOO'), to_varchar(col, 'O OOOO') from v -- !query analysis -Project [col#x, date_format(col#x, O OOOO, Some(America/Los_Angeles)) AS date_format(col, O OOOO)#x, date_format(col#x, O OOOO, Some(America/Los_Angeles)) AS date_format(col, O OOOO)#x] +Project [col#x, date_format(col#x, O OOOO, Some(America/Los_Angeles)) AS date_format(col, O OOOO)#x, date_format(col#x, O OOOO, Some(America/Los_Angeles)) AS date_format(col, O OOOO)#x, date_format(col#x, O OOOO, Some(America/Los_Angeles)) AS date_format(col, O OOOO)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -317,9 +317,9 @@ Project [col#x, date_format(col#x, O OOOO, Some(America/Los_Angeles)) AS date_fo -- !query -select col, date_format(col, 'x xx xxx xxxx xxxx xxxxx'), to_char(col, 'x xx xxx xxxx xxxx xxxxx') from v +select col, date_format(col, 'x xx xxx xxxx xxxx xxxxx'), to_char(col, 'x xx xxx xxxx xxxx xxxxx'), to_varchar(col, 'x xx xxx xxxx xxxx xxxxx') from v -- !query analysis -Project [col#x, date_format(col#x, x xx xxx xxxx xxxx xxxxx, Some(America/Los_Angeles)) AS date_format(col, x xx xxx xxxx xxxx xxxxx)#x, date_format(col#x, x xx xxx xxxx xxxx xxxxx, Some(America/Los_Angeles)) AS date_format(col, x xx xxx xxxx xxxx xxxxx)#x] +Project [col#x, date_format(col#x, x xx xxx xxxx xxxx xxxxx, Some(America/Los_Angeles)) AS date_format(col, x xx xxx xxxx xxxx xxxxx)#x, date_format(col#x, x xx xxx xxxx xxxx xxxxx, Some(America/Los_Angeles)) AS date_format(col, x xx xxx xxxx xxxx xxxxx)#x, date_format(col#x, x xx xxx xxxx xxxx xxxxx, Some(America/Los_Angeles)) AS date_format(col, x xx xxx xxxx xxxx xxxxx)#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -329,9 +329,9 @@ Project [col#x, date_format(col#x, x xx xxx xxxx xxxx xxxxx, Some(America/Los_An -- !query -select col, date_format(col, '[yyyy-MM-dd HH:mm:ss]'), to_char(col, '[yyyy-MM-dd HH:mm:ss]') from v +select col, date_format(col, '[yyyy-MM-dd HH:mm:ss]'), to_char(col, '[yyyy-MM-dd HH:mm:ss]'), to_varchar(col, '[yyyy-MM-dd HH:mm:ss]') from v -- !query analysis -Project [col#x, date_format(col#x, [yyyy-MM-dd HH:mm:ss], Some(America/Los_Angeles)) AS date_format(col, [yyyy-MM-dd HH:mm:ss])#x, date_format(col#x, [yyyy-MM-dd HH:mm:ss], Some(America/Los_Angeles)) AS date_format(col, [yyyy-MM-dd HH:mm:ss])#x] +Project [col#x, date_format(col#x, [yyyy-MM-dd HH:mm:ss], Some(America/Los_Angeles)) AS date_format(col, [yyyy-MM-dd HH:mm:ss])#x, date_format(col#x, [yyyy-MM-dd HH:mm:ss], Some(America/Los_Angeles)) AS date_format(col, [yyyy-MM-dd HH:mm:ss])#x, date_format(col#x, [yyyy-MM-dd HH:mm:ss], Some(America/Los_Angeles)) AS date_format(col, [yyyy-MM-dd HH:mm:ss])#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -341,9 +341,9 @@ Project [col#x, date_format(col#x, [yyyy-MM-dd HH:mm:ss], Some(America/Los_Angel -- !query -select col, date_format(col, "姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV'"), to_char(col, "姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV'") from v +select col, date_format(col, "姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV'"), to_char(col, "姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV'"), to_varchar(col, "姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV'") from v -- !query analysis -Project [col#x, date_format(col#x, 姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV', Some(America/Los_Angeles)) AS date_format(col, 姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV')#x, date_format(col#x, 姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV', Some(America/Los_Angeles)) AS date_format(col, 姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV')#x] +Project [col#x, date_format(col#x, 姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV', Some(America/Los_Angeles)) AS date_format(col, 姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV')#x, date_format(col#x, 姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV', Some(America/Los_Angeles)) AS date_format(col, 姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV')#x, date_format(col#x, 姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV', Some(America/Los_Angeles)) AS date_format(col, 姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV')#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -353,9 +353,9 @@ Project [col#x, date_format(col#x, 姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV', Some(Ame -- !query -select col, date_format(col, "''"), to_char(col, "''") from v +select col, date_format(col, "''"), to_char(col, "''"), to_varchar(col, "''") from v -- !query analysis -Project [col#x, date_format(col#x, '', Some(America/Los_Angeles)) AS date_format(col, '')#x, date_format(col#x, '', Some(America/Los_Angeles)) AS date_format(col, '')#x] +Project [col#x, date_format(col#x, '', Some(America/Los_Angeles)) AS date_format(col, '')#x, date_format(col#x, '', Some(America/Los_Angeles)) AS date_format(col, '')#x, date_format(col#x, '', Some(America/Los_Angeles)) AS date_format(col, '')#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] @@ -365,12 +365,31 @@ Project [col#x, date_format(col#x, '', Some(America/Los_Angeles)) AS date_format -- !query -select col, date_format(col, ''), to_char(col, '') from v +select col, date_format(col, ''), to_char(col, ''), to_varchar(col, '') from v -- !query analysis -Project [col#x, date_format(col#x, , Some(America/Los_Angeles)) AS date_format(col, )#x, date_format(col#x, , Some(America/Los_Angeles)) AS date_format(col, )#x] +Project [col#x, date_format(col#x, , Some(America/Los_Angeles)) AS date_format(col, )#x, date_format(col#x, , Some(America/Los_Angeles)) AS date_format(col, )#x, date_format(col#x, , Some(America/Los_Angeles)) AS date_format(col, )#x] +- SubqueryAlias v +- View (`v`, [col#x]) +- Project [cast(col#x as timestamp) AS col#x] +- Project [col#x] +- SubqueryAlias t +- LocalRelation [col#x] + + +-- !query +select date_format(date'2023-08-18', 'yyyy-MM-dd'), to_char(date'2023-08-18', 'yyyy-MM-dd'), to_varchar(date'2023-08-18', 'yyyy-MM-dd') +-- !query analysis +[Analyzer test output redacted due to nondeterminism] + + +-- !query +select date_format(timestamp_ltz'2023-08-18 09:13:14.123456Z', 'yyyy-MM-dd HH:mm:ss.SSSSSSZ'), to_char(timestamp_ltz'2023-08-18 09:13:14.123456Z', 'yyyy-MM-dd HH:mm:ss.SSSSSSZ'), to_varchar(timestamp_ltz'2023-08-18 09:13:14.123456Z', 'yyyy-MM-dd HH:mm:ss.SSSSSSZ') +-- !query analysis +[Analyzer test output redacted due to nondeterminism] + + +-- !query +select date_format(timestamp_ntz'2023-08-18 09:13:14.123456', 'yyyy-MM-dd HH:mm:ss.SSSSSS'), to_char(timestamp_ntz'2023-08-18 09:13:14.123456', 'yyyy-MM-dd HH:mm:ss.SSSSSS'), to_varchar(timestamp_ntz'2023-08-18 09:13:14.123456', 'yyyy-MM-dd HH:mm:ss.SSSSSS') +-- !query analysis +Project [date_format(cast(2023-08-18 09:13:14.123456 as timestamp), yyyy-MM-dd HH:mm:ss.SSSSSS, Some(America/Los_Angeles)) AS date_format(TIMESTAMP_NTZ '2023-08-18 09:13:14.123456', yyyy-MM-dd HH:mm:ss.SSSSSS)#x, date_format(cast(2023-08-18 09:13:14.123456 as timestamp), yyyy-MM-dd HH:mm:ss.SSSSSS, Some(America/Los_Angeles)) AS date_format(TIMESTAMP_NTZ '2023-08-18 09:13:14.123456', yyyy-MM-dd HH:mm:ss.SSSSSS)#x, date_format(cast(2023-08-18 09:13:14.123456 as timestamp), yyyy-MM-dd HH:mm:ss.SSSSSS, Some(America/Los_Angeles)) AS date_format(TIMESTAMP_NTZ '2023-08-18 09:13:14.123456', yyyy-MM-dd HH:mm:ss.SSSSSS)#x] ++- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/inputs/datetime-formatting.sql b/sql/core/src/test/resources/sql-tests/inputs/datetime-formatting.sql index a22b0bbb2822b..3618bb5c399f9 100644 --- a/sql/core/src/test/resources/sql-tests/inputs/datetime-formatting.sql +++ b/sql/core/src/test/resources/sql-tests/inputs/datetime-formatting.sql @@ -9,60 +9,65 @@ create temporary view v as select col from values (timestamp '2020-01-01 01:33:33.123Asia/Shanghai'), (timestamp '2100-01-01 01:33:33.123America/Los_Angeles') t(col); -select col, date_format(col, 'G GG GGG GGGG'), to_char(col, 'G GG GGG GGGG') from v; +select col, date_format(col, 'G GG GGG GGGG'), to_char(col, 'G GG GGG GGGG'), to_varchar(col, 'G GG GGG GGGG') from v; -select col, date_format(col, 'y yy yyy yyyy yyyyy yyyyyy'), to_char(col, 'y yy yyy yyyy yyyyy yyyyyy') from v; +select col, date_format(col, 'y yy yyy yyyy yyyyy yyyyyy'), to_char(col, 'y yy yyy yyyy yyyyy yyyyyy'), to_varchar(col, 'y yy yyy yyyy yyyyy yyyyyy') from v; -select col, date_format(col, 'q qq'), to_char(col, 'q qq') from v; +select col, date_format(col, 'q qq'), to_char(col, 'q qq'), to_varchar(col, 'q qq') from v; -select col, date_format(col, 'Q QQ QQQ QQQQ'), to_char(col, 'Q QQ QQQ QQQQ') from v; +select col, date_format(col, 'Q QQ QQQ QQQQ'), to_char(col, 'Q QQ QQQ QQQQ'), to_varchar(col, 'Q QQ QQQ QQQQ') from v; -select col, date_format(col, 'M MM MMM MMMM'), to_char(col, 'M MM MMM MMMM') from v; +select col, date_format(col, 'M MM MMM MMMM'), to_char(col, 'M MM MMM MMMM'), to_varchar(col, 'M MM MMM MMMM') from v; -select col, date_format(col, 'L LL'), to_char(col, 'L LL') from v; +select col, date_format(col, 'L LL'), to_char(col, 'L LL'), to_varchar(col, 'L LL') from v; -select col, date_format(col, 'E EE EEE EEEE'), to_char(col, 'E EE EEE EEEE') from v; +select col, date_format(col, 'E EE EEE EEEE'), to_char(col, 'E EE EEE EEEE'), to_varchar(col, 'E EE EEE EEEE') from v; -select col, date_format(col, 'F'), to_char(col, 'F') from v; +select col, date_format(col, 'F'), to_char(col, 'F'), to_varchar(col, 'F') from v; -select col, date_format(col, 'd dd'), to_char(col, 'd dd') from v; +select col, date_format(col, 'd dd'), to_char(col, 'd dd'), to_varchar(col, 'd dd') from v; -select col, date_format(col, 'DD'), to_char(col, 'DD') from v where col = timestamp '2100-01-01 01:33:33.123America/Los_Angeles'; -select col, date_format(col, 'D DDD'), to_char(col, 'D DDD') from v; +select col, date_format(col, 'DD'), to_char(col, 'DD'), to_varchar(col, 'DD') from v where col = timestamp '2100-01-01 01:33:33.123America/Los_Angeles'; +select col, date_format(col, 'D DDD'), to_char(col, 'D DDD'), to_varchar(col, 'D DDD') from v; -select col, date_format(col, 'H HH'), to_char(col, 'H HH') from v; +select col, date_format(col, 'H HH'), to_char(col, 'H HH'), to_varchar(col, 'H HH') from v; -select col, date_format(col, 'h hh'), to_char(col, 'h hh') from v; +select col, date_format(col, 'h hh'), to_char(col, 'h hh'), to_varchar(col, 'h hh') from v; -select col, date_format(col, 'k kk'), to_char(col, 'k kk') from v; +select col, date_format(col, 'k kk'), to_char(col, 'k kk'), to_varchar(col, 'k kk') from v; -select col, date_format(col, 'K KK'), to_char(col, 'K KK') from v; +select col, date_format(col, 'K KK'), to_char(col, 'K KK'), to_varchar(col, 'K KK') from v; -select col, date_format(col, 'm mm'), to_char(col, 'm mm') from v; +select col, date_format(col, 'm mm'), to_char(col, 'm mm'), to_varchar(col, 'm mm') from v; -select col, date_format(col, 's ss'), to_char(col, 's ss') from v; +select col, date_format(col, 's ss'), to_char(col, 's ss'), to_varchar(col, 's ss') from v; -select col, date_format(col, 'S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS'), to_char(col, 'S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS') from v; +select col, date_format(col, 'S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS'), to_char(col, 'S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS'), to_varchar(col, 'S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS') from v; -select col, date_format(col, 'a'), to_char(col, 'a') from v; +select col, date_format(col, 'a'), to_char(col, 'a'), to_varchar(col, 'a') from v; -select col, date_format(col, 'VV'), to_char(col, 'VV') from v; +select col, date_format(col, 'VV'), to_char(col, 'VV'), to_varchar(col, 'VV') from v; -select col, date_format(col, 'z zz zzz zzzz'), to_char(col, 'z zz zzz zzzz') from v; +select col, date_format(col, 'z zz zzz zzzz'), to_char(col, 'z zz zzz zzzz'), to_varchar(col, 'z zz zzz zzzz') from v; -select col, date_format(col, 'X XX XXX'), to_char(col, 'X XX XXX') from v; -select col, date_format(col, 'XXXX XXXXX'), to_char(col, 'XXXX XXXXX') from v; +select col, date_format(col, 'X XX XXX'), to_char(col, 'X XX XXX'), to_varchar(col, 'X XX XXX') from v; +select col, date_format(col, 'XXXX XXXXX'), to_char(col, 'XXXX XXXXX'), to_varchar(col, 'XXXX XXXXX') from v; -select col, date_format(col, 'Z ZZ ZZZ ZZZZ ZZZZZ'), to_char(col, 'Z ZZ ZZZ ZZZZ ZZZZZ') from v; +select col, date_format(col, 'Z ZZ ZZZ ZZZZ ZZZZZ'), to_char(col, 'Z ZZ ZZZ ZZZZ ZZZZZ'), to_varchar(col, 'Z ZZ ZZZ ZZZZ ZZZZZ') from v; -select col, date_format(col, 'O OOOO'), to_char(col, 'O OOOO') from v; +select col, date_format(col, 'O OOOO'), to_char(col, 'O OOOO'), to_varchar(col, 'O OOOO') from v; -select col, date_format(col, 'x xx xxx xxxx xxxx xxxxx'), to_char(col, 'x xx xxx xxxx xxxx xxxxx') from v; +select col, date_format(col, 'x xx xxx xxxx xxxx xxxxx'), to_char(col, 'x xx xxx xxxx xxxx xxxxx'), to_varchar(col, 'x xx xxx xxxx xxxx xxxxx') from v; -- optional pattern, but the results won't be optional for formatting -select col, date_format(col, '[yyyy-MM-dd HH:mm:ss]'), to_char(col, '[yyyy-MM-dd HH:mm:ss]') from v; +select col, date_format(col, '[yyyy-MM-dd HH:mm:ss]'), to_char(col, '[yyyy-MM-dd HH:mm:ss]'), to_varchar(col, '[yyyy-MM-dd HH:mm:ss]') from v; -- literals -select col, date_format(col, "姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV'"), to_char(col, "姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV'") from v; -select col, date_format(col, "''"), to_char(col, "''") from v; -select col, date_format(col, ''), to_char(col, '') from v; +select col, date_format(col, "姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV'"), to_char(col, "姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV'"), to_varchar(col, "姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV'") from v; +select col, date_format(col, "''"), to_char(col, "''"), to_varchar(col, "''") from v; +select col, date_format(col, ''), to_char(col, ''), to_varchar(col, '') from v; + +-- different datetime types +select date_format(date'2023-08-18', 'yyyy-MM-dd'), to_char(date'2023-08-18', 'yyyy-MM-dd'), to_varchar(date'2023-08-18', 'yyyy-MM-dd'); +select date_format(timestamp_ltz'2023-08-18 09:13:14.123456Z', 'yyyy-MM-dd HH:mm:ss.SSSSSSZ'), to_char(timestamp_ltz'2023-08-18 09:13:14.123456Z', 'yyyy-MM-dd HH:mm:ss.SSSSSSZ'), to_varchar(timestamp_ltz'2023-08-18 09:13:14.123456Z', 'yyyy-MM-dd HH:mm:ss.SSSSSSZ'); +select date_format(timestamp_ntz'2023-08-18 09:13:14.123456', 'yyyy-MM-dd HH:mm:ss.SSSSSS'), to_char(timestamp_ntz'2023-08-18 09:13:14.123456', 'yyyy-MM-dd HH:mm:ss.SSSSSS'), to_varchar(timestamp_ntz'2023-08-18 09:13:14.123456', 'yyyy-MM-dd HH:mm:ss.SSSSSS'); diff --git a/sql/core/src/test/resources/sql-tests/results/datetime-formatting-legacy.sql.out b/sql/core/src/test/resources/sql-tests/results/datetime-formatting-legacy.sql.out index ed43af9cb518e..b920f8f296581 100644 --- a/sql/core/src/test/resources/sql-tests/results/datetime-formatting-legacy.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/datetime-formatting-legacy.sql.out @@ -15,35 +15,35 @@ struct<> -- !query -select col, date_format(col, 'G GG GGG GGGG') from v +select col, date_format(col, 'G GG GGG GGGG'), to_char(col, 'G GG GGG GGGG'), to_varchar(col, 'G GG GGG GGGG') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 AD AD AD AD -1969-12-31 15:00:00 AD AD AD AD -1970-12-31 04:59:59.999 AD AD AD AD -1996-03-31 07:03:33.123 AD AD AD AD -2018-11-17 05:33:33.123 AD AD AD AD -2019-12-31 09:33:33.123 AD AD AD AD -2100-01-01 01:33:33.123 AD AD AD AD +1582-05-31 19:40:35.123 AD AD AD AD AD AD AD AD AD AD AD AD +1969-12-31 15:00:00 AD AD AD AD AD AD AD AD AD AD AD AD +1970-12-31 04:59:59.999 AD AD AD AD AD AD AD AD AD AD AD AD +1996-03-31 07:03:33.123 AD AD AD AD AD AD AD AD AD AD AD AD +2018-11-17 05:33:33.123 AD AD AD AD AD AD AD AD AD AD AD AD +2019-12-31 09:33:33.123 AD AD AD AD AD AD AD AD AD AD AD AD +2100-01-01 01:33:33.123 AD AD AD AD AD AD AD AD AD AD AD AD -- !query -select col, date_format(col, 'y yy yyy yyyy yyyyy yyyyyy') from v +select col, date_format(col, 'y yy yyy yyyy yyyyy yyyyyy'), to_char(col, 'y yy yyy yyyy yyyyy yyyyyy'), to_varchar(col, 'y yy yyy yyyy yyyyy yyyyyy') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 1582 82 1582 1582 01582 001582 -1969-12-31 15:00:00 1969 69 1969 1969 01969 001969 -1970-12-31 04:59:59.999 1970 70 1970 1970 01970 001970 -1996-03-31 07:03:33.123 1996 96 1996 1996 01996 001996 -2018-11-17 05:33:33.123 2018 18 2018 2018 02018 002018 -2019-12-31 09:33:33.123 2019 19 2019 2019 02019 002019 -2100-01-01 01:33:33.123 2100 00 2100 2100 02100 002100 +1582-05-31 19:40:35.123 1582 82 1582 1582 01582 001582 1582 82 1582 1582 01582 001582 1582 82 1582 1582 01582 001582 +1969-12-31 15:00:00 1969 69 1969 1969 01969 001969 1969 69 1969 1969 01969 001969 1969 69 1969 1969 01969 001969 +1970-12-31 04:59:59.999 1970 70 1970 1970 01970 001970 1970 70 1970 1970 01970 001970 1970 70 1970 1970 01970 001970 +1996-03-31 07:03:33.123 1996 96 1996 1996 01996 001996 1996 96 1996 1996 01996 001996 1996 96 1996 1996 01996 001996 +2018-11-17 05:33:33.123 2018 18 2018 2018 02018 002018 2018 18 2018 2018 02018 002018 2018 18 2018 2018 02018 002018 +2019-12-31 09:33:33.123 2019 19 2019 2019 02019 002019 2019 19 2019 2019 02019 002019 2019 19 2019 2019 02019 002019 +2100-01-01 01:33:33.123 2100 00 2100 2100 02100 002100 2100 00 2100 2100 02100 002100 2100 00 2100 2100 02100 002100 -- !query -select col, date_format(col, 'q qq') from v +select col, date_format(col, 'q qq'), to_char(col, 'q qq'), to_varchar(col, 'q qq') from v -- !query schema struct<> -- !query output @@ -52,7 +52,7 @@ Illegal pattern character 'q' -- !query -select col, date_format(col, 'Q QQ QQQ QQQQ') from v +select col, date_format(col, 'Q QQ QQQ QQQQ'), to_char(col, 'Q QQ QQQ QQQQ'), to_varchar(col, 'Q QQ QQQ QQQQ') from v -- !query schema struct<> -- !query output @@ -61,211 +61,211 @@ Illegal pattern character 'Q' -- !query -select col, date_format(col, 'M MM MMM MMMM') from v +select col, date_format(col, 'M MM MMM MMMM'), to_char(col, 'M MM MMM MMMM'), to_varchar(col, 'M MM MMM MMMM') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 5 05 May May -1969-12-31 15:00:00 12 12 Dec December -1970-12-31 04:59:59.999 12 12 Dec December -1996-03-31 07:03:33.123 3 03 Mar March -2018-11-17 05:33:33.123 11 11 Nov November -2019-12-31 09:33:33.123 12 12 Dec December -2100-01-01 01:33:33.123 1 01 Jan January +1582-05-31 19:40:35.123 5 05 May May 5 05 May May 5 05 May May +1969-12-31 15:00:00 12 12 Dec December 12 12 Dec December 12 12 Dec December +1970-12-31 04:59:59.999 12 12 Dec December 12 12 Dec December 12 12 Dec December +1996-03-31 07:03:33.123 3 03 Mar March 3 03 Mar March 3 03 Mar March +2018-11-17 05:33:33.123 11 11 Nov November 11 11 Nov November 11 11 Nov November +2019-12-31 09:33:33.123 12 12 Dec December 12 12 Dec December 12 12 Dec December +2100-01-01 01:33:33.123 1 01 Jan January 1 01 Jan January 1 01 Jan January -- !query -select col, date_format(col, 'L LL') from v +select col, date_format(col, 'L LL'), to_char(col, 'L LL'), to_varchar(col, 'L LL') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 5 05 -1969-12-31 15:00:00 12 12 -1970-12-31 04:59:59.999 12 12 -1996-03-31 07:03:33.123 3 03 -2018-11-17 05:33:33.123 11 11 -2019-12-31 09:33:33.123 12 12 -2100-01-01 01:33:33.123 1 01 +1582-05-31 19:40:35.123 5 05 5 05 5 05 +1969-12-31 15:00:00 12 12 12 12 12 12 +1970-12-31 04:59:59.999 12 12 12 12 12 12 +1996-03-31 07:03:33.123 3 03 3 03 3 03 +2018-11-17 05:33:33.123 11 11 11 11 11 11 +2019-12-31 09:33:33.123 12 12 12 12 12 12 +2100-01-01 01:33:33.123 1 01 1 01 1 01 -- !query -select col, date_format(col, 'E EE EEE EEEE') from v +select col, date_format(col, 'E EE EEE EEEE'), to_char(col, 'E EE EEE EEEE'), to_varchar(col, 'E EE EEE EEEE') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 Thu Thu Thu Thursday -1969-12-31 15:00:00 Wed Wed Wed Wednesday -1970-12-31 04:59:59.999 Thu Thu Thu Thursday -1996-03-31 07:03:33.123 Sun Sun Sun Sunday -2018-11-17 05:33:33.123 Sat Sat Sat Saturday -2019-12-31 09:33:33.123 Tue Tue Tue Tuesday -2100-01-01 01:33:33.123 Fri Fri Fri Friday +1582-05-31 19:40:35.123 Thu Thu Thu Thursday Thu Thu Thu Thursday Thu Thu Thu Thursday +1969-12-31 15:00:00 Wed Wed Wed Wednesday Wed Wed Wed Wednesday Wed Wed Wed Wednesday +1970-12-31 04:59:59.999 Thu Thu Thu Thursday Thu Thu Thu Thursday Thu Thu Thu Thursday +1996-03-31 07:03:33.123 Sun Sun Sun Sunday Sun Sun Sun Sunday Sun Sun Sun Sunday +2018-11-17 05:33:33.123 Sat Sat Sat Saturday Sat Sat Sat Saturday Sat Sat Sat Saturday +2019-12-31 09:33:33.123 Tue Tue Tue Tuesday Tue Tue Tue Tuesday Tue Tue Tue Tuesday +2100-01-01 01:33:33.123 Fri Fri Fri Friday Fri Fri Fri Friday Fri Fri Fri Friday -- !query -select col, date_format(col, 'F') from v +select col, date_format(col, 'F'), to_char(col, 'F'), to_varchar(col, 'F') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 5 -1969-12-31 15:00:00 5 -1970-12-31 04:59:59.999 5 -1996-03-31 07:03:33.123 5 -2018-11-17 05:33:33.123 3 -2019-12-31 09:33:33.123 5 -2100-01-01 01:33:33.123 1 +1582-05-31 19:40:35.123 5 5 5 +1969-12-31 15:00:00 5 5 5 +1970-12-31 04:59:59.999 5 5 5 +1996-03-31 07:03:33.123 5 5 5 +2018-11-17 05:33:33.123 3 3 3 +2019-12-31 09:33:33.123 5 5 5 +2100-01-01 01:33:33.123 1 1 1 -- !query -select col, date_format(col, 'd dd') from v +select col, date_format(col, 'd dd'), to_char(col, 'd dd'), to_varchar(col, 'd dd') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 31 31 -1969-12-31 15:00:00 31 31 -1970-12-31 04:59:59.999 31 31 -1996-03-31 07:03:33.123 31 31 -2018-11-17 05:33:33.123 17 17 -2019-12-31 09:33:33.123 31 31 -2100-01-01 01:33:33.123 1 01 +1582-05-31 19:40:35.123 31 31 31 31 31 31 +1969-12-31 15:00:00 31 31 31 31 31 31 +1970-12-31 04:59:59.999 31 31 31 31 31 31 +1996-03-31 07:03:33.123 31 31 31 31 31 31 +2018-11-17 05:33:33.123 17 17 17 17 17 17 +2019-12-31 09:33:33.123 31 31 31 31 31 31 +2100-01-01 01:33:33.123 1 01 1 01 1 01 -- !query -select col, date_format(col, 'DD') from v where col = timestamp '2100-01-01 01:33:33.123America/Los_Angeles' +select col, date_format(col, 'DD'), to_char(col, 'DD'), to_varchar(col, 'DD') from v where col = timestamp '2100-01-01 01:33:33.123America/Los_Angeles' -- !query schema -struct +struct -- !query output -2100-01-01 01:33:33.123 01 +2100-01-01 01:33:33.123 01 01 01 -- !query -select col, date_format(col, 'D DDD') from v +select col, date_format(col, 'D DDD'), to_char(col, 'D DDD'), to_varchar(col, 'D DDD') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 151 151 -1969-12-31 15:00:00 365 365 -1970-12-31 04:59:59.999 365 365 -1996-03-31 07:03:33.123 91 091 -2018-11-17 05:33:33.123 321 321 -2019-12-31 09:33:33.123 365 365 -2100-01-01 01:33:33.123 1 001 +1582-05-31 19:40:35.123 151 151 151 151 151 151 +1969-12-31 15:00:00 365 365 365 365 365 365 +1970-12-31 04:59:59.999 365 365 365 365 365 365 +1996-03-31 07:03:33.123 91 091 91 091 91 091 +2018-11-17 05:33:33.123 321 321 321 321 321 321 +2019-12-31 09:33:33.123 365 365 365 365 365 365 +2100-01-01 01:33:33.123 1 001 1 001 1 001 -- !query -select col, date_format(col, 'H HH') from v +select col, date_format(col, 'H HH'), to_char(col, 'H HH'), to_varchar(col, 'H HH') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 19 19 -1969-12-31 15:00:00 15 15 -1970-12-31 04:59:59.999 4 04 -1996-03-31 07:03:33.123 7 07 -2018-11-17 05:33:33.123 5 05 -2019-12-31 09:33:33.123 9 09 -2100-01-01 01:33:33.123 1 01 +1582-05-31 19:40:35.123 19 19 19 19 19 19 +1969-12-31 15:00:00 15 15 15 15 15 15 +1970-12-31 04:59:59.999 4 04 4 04 4 04 +1996-03-31 07:03:33.123 7 07 7 07 7 07 +2018-11-17 05:33:33.123 5 05 5 05 5 05 +2019-12-31 09:33:33.123 9 09 9 09 9 09 +2100-01-01 01:33:33.123 1 01 1 01 1 01 -- !query -select col, date_format(col, 'h hh') from v +select col, date_format(col, 'h hh'), to_char(col, 'h hh'), to_varchar(col, 'h hh') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 7 07 -1969-12-31 15:00:00 3 03 -1970-12-31 04:59:59.999 4 04 -1996-03-31 07:03:33.123 7 07 -2018-11-17 05:33:33.123 5 05 -2019-12-31 09:33:33.123 9 09 -2100-01-01 01:33:33.123 1 01 +1582-05-31 19:40:35.123 7 07 7 07 7 07 +1969-12-31 15:00:00 3 03 3 03 3 03 +1970-12-31 04:59:59.999 4 04 4 04 4 04 +1996-03-31 07:03:33.123 7 07 7 07 7 07 +2018-11-17 05:33:33.123 5 05 5 05 5 05 +2019-12-31 09:33:33.123 9 09 9 09 9 09 +2100-01-01 01:33:33.123 1 01 1 01 1 01 -- !query -select col, date_format(col, 'k kk') from v +select col, date_format(col, 'k kk'), to_char(col, 'k kk'), to_varchar(col, 'k kk') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 19 19 -1969-12-31 15:00:00 15 15 -1970-12-31 04:59:59.999 4 04 -1996-03-31 07:03:33.123 7 07 -2018-11-17 05:33:33.123 5 05 -2019-12-31 09:33:33.123 9 09 -2100-01-01 01:33:33.123 1 01 +1582-05-31 19:40:35.123 19 19 19 19 19 19 +1969-12-31 15:00:00 15 15 15 15 15 15 +1970-12-31 04:59:59.999 4 04 4 04 4 04 +1996-03-31 07:03:33.123 7 07 7 07 7 07 +2018-11-17 05:33:33.123 5 05 5 05 5 05 +2019-12-31 09:33:33.123 9 09 9 09 9 09 +2100-01-01 01:33:33.123 1 01 1 01 1 01 -- !query -select col, date_format(col, 'K KK') from v +select col, date_format(col, 'K KK'), to_char(col, 'K KK'), to_varchar(col, 'K KK') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 7 07 -1969-12-31 15:00:00 3 03 -1970-12-31 04:59:59.999 4 04 -1996-03-31 07:03:33.123 7 07 -2018-11-17 05:33:33.123 5 05 -2019-12-31 09:33:33.123 9 09 -2100-01-01 01:33:33.123 1 01 +1582-05-31 19:40:35.123 7 07 7 07 7 07 +1969-12-31 15:00:00 3 03 3 03 3 03 +1970-12-31 04:59:59.999 4 04 4 04 4 04 +1996-03-31 07:03:33.123 7 07 7 07 7 07 +2018-11-17 05:33:33.123 5 05 5 05 5 05 +2019-12-31 09:33:33.123 9 09 9 09 9 09 +2100-01-01 01:33:33.123 1 01 1 01 1 01 -- !query -select col, date_format(col, 'm mm') from v +select col, date_format(col, 'm mm'), to_char(col, 'm mm'), to_varchar(col, 'm mm') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 40 40 -1969-12-31 15:00:00 0 00 -1970-12-31 04:59:59.999 59 59 -1996-03-31 07:03:33.123 3 03 -2018-11-17 05:33:33.123 33 33 -2019-12-31 09:33:33.123 33 33 -2100-01-01 01:33:33.123 33 33 +1582-05-31 19:40:35.123 40 40 40 40 40 40 +1969-12-31 15:00:00 0 00 0 00 0 00 +1970-12-31 04:59:59.999 59 59 59 59 59 59 +1996-03-31 07:03:33.123 3 03 3 03 3 03 +2018-11-17 05:33:33.123 33 33 33 33 33 33 +2019-12-31 09:33:33.123 33 33 33 33 33 33 +2100-01-01 01:33:33.123 33 33 33 33 33 33 -- !query -select col, date_format(col, 's ss') from v +select col, date_format(col, 's ss'), to_char(col, 's ss'), to_varchar(col, 's ss') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 35 35 -1969-12-31 15:00:00 0 00 -1970-12-31 04:59:59.999 59 59 -1996-03-31 07:03:33.123 33 33 -2018-11-17 05:33:33.123 33 33 -2019-12-31 09:33:33.123 33 33 -2100-01-01 01:33:33.123 33 33 +1582-05-31 19:40:35.123 35 35 35 35 35 35 +1969-12-31 15:00:00 0 00 0 00 0 00 +1970-12-31 04:59:59.999 59 59 59 59 59 59 +1996-03-31 07:03:33.123 33 33 33 33 33 33 +2018-11-17 05:33:33.123 33 33 33 33 33 33 +2019-12-31 09:33:33.123 33 33 33 33 33 33 +2100-01-01 01:33:33.123 33 33 33 33 33 33 -- !query -select col, date_format(col, 'S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS') from v +select col, date_format(col, 'S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS'), to_char(col, 'S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS'), to_varchar(col, 'S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 123 123 123 0123 00123 000123 0000123 00000123 000000123 -1969-12-31 15:00:00 0 00 000 0000 00000 000000 0000000 00000000 000000000 -1970-12-31 04:59:59.999 999 999 999 0999 00999 000999 0000999 00000999 000000999 -1996-03-31 07:03:33.123 123 123 123 0123 00123 000123 0000123 00000123 000000123 -2018-11-17 05:33:33.123 123 123 123 0123 00123 000123 0000123 00000123 000000123 -2019-12-31 09:33:33.123 123 123 123 0123 00123 000123 0000123 00000123 000000123 -2100-01-01 01:33:33.123 123 123 123 0123 00123 000123 0000123 00000123 000000123 +1582-05-31 19:40:35.123 123 123 123 0123 00123 000123 0000123 00000123 000000123 123 123 123 0123 00123 000123 0000123 00000123 000000123 123 123 123 0123 00123 000123 0000123 00000123 000000123 +1969-12-31 15:00:00 0 00 000 0000 00000 000000 0000000 00000000 000000000 0 00 000 0000 00000 000000 0000000 00000000 000000000 0 00 000 0000 00000 000000 0000000 00000000 000000000 +1970-12-31 04:59:59.999 999 999 999 0999 00999 000999 0000999 00000999 000000999 999 999 999 0999 00999 000999 0000999 00000999 000000999 999 999 999 0999 00999 000999 0000999 00000999 000000999 +1996-03-31 07:03:33.123 123 123 123 0123 00123 000123 0000123 00000123 000000123 123 123 123 0123 00123 000123 0000123 00000123 000000123 123 123 123 0123 00123 000123 0000123 00000123 000000123 +2018-11-17 05:33:33.123 123 123 123 0123 00123 000123 0000123 00000123 000000123 123 123 123 0123 00123 000123 0000123 00000123 000000123 123 123 123 0123 00123 000123 0000123 00000123 000000123 +2019-12-31 09:33:33.123 123 123 123 0123 00123 000123 0000123 00000123 000000123 123 123 123 0123 00123 000123 0000123 00000123 000000123 123 123 123 0123 00123 000123 0000123 00000123 000000123 +2100-01-01 01:33:33.123 123 123 123 0123 00123 000123 0000123 00000123 000000123 123 123 123 0123 00123 000123 0000123 00000123 000000123 123 123 123 0123 00123 000123 0000123 00000123 000000123 -- !query -select col, date_format(col, 'a') from v +select col, date_format(col, 'a'), to_char(col, 'a'), to_varchar(col, 'a') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 PM -1969-12-31 15:00:00 PM -1970-12-31 04:59:59.999 AM -1996-03-31 07:03:33.123 AM -2018-11-17 05:33:33.123 AM -2019-12-31 09:33:33.123 AM -2100-01-01 01:33:33.123 AM +1582-05-31 19:40:35.123 PM PM PM +1969-12-31 15:00:00 PM PM PM +1970-12-31 04:59:59.999 AM AM AM +1996-03-31 07:03:33.123 AM AM AM +2018-11-17 05:33:33.123 AM AM AM +2019-12-31 09:33:33.123 AM AM AM +2100-01-01 01:33:33.123 AM AM AM -- !query -select col, date_format(col, 'VV') from v +select col, date_format(col, 'VV'), to_char(col, 'VV'), to_varchar(col, 'VV') from v -- !query schema struct<> -- !query output @@ -274,35 +274,35 @@ Illegal pattern character 'V' -- !query -select col, date_format(col, 'z zz zzz zzzz') from v +select col, date_format(col, 'z zz zzz zzzz'), to_char(col, 'z zz zzz zzzz'), to_varchar(col, 'z zz zzz zzzz') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 PST PST PST Pacific Standard Time -1969-12-31 15:00:00 PST PST PST Pacific Standard Time -1970-12-31 04:59:59.999 PST PST PST Pacific Standard Time -1996-03-31 07:03:33.123 PST PST PST Pacific Standard Time -2018-11-17 05:33:33.123 PST PST PST Pacific Standard Time -2019-12-31 09:33:33.123 PST PST PST Pacific Standard Time -2100-01-01 01:33:33.123 PST PST PST Pacific Standard Time +1582-05-31 19:40:35.123 PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time +1969-12-31 15:00:00 PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time +1970-12-31 04:59:59.999 PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time +1996-03-31 07:03:33.123 PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time +2018-11-17 05:33:33.123 PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time +2019-12-31 09:33:33.123 PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time +2100-01-01 01:33:33.123 PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time -- !query -select col, date_format(col, 'X XX XXX') from v +select col, date_format(col, 'X XX XXX'), to_char(col, 'X XX XXX'), to_varchar(col, 'X XX XXX') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 -08 -0800 -08:00 -1969-12-31 15:00:00 -08 -0800 -08:00 -1970-12-31 04:59:59.999 -08 -0800 -08:00 -1996-03-31 07:03:33.123 -08 -0800 -08:00 -2018-11-17 05:33:33.123 -08 -0800 -08:00 -2019-12-31 09:33:33.123 -08 -0800 -08:00 -2100-01-01 01:33:33.123 -08 -0800 -08:00 +1582-05-31 19:40:35.123 -08 -0800 -08:00 -08 -0800 -08:00 -08 -0800 -08:00 +1969-12-31 15:00:00 -08 -0800 -08:00 -08 -0800 -08:00 -08 -0800 -08:00 +1970-12-31 04:59:59.999 -08 -0800 -08:00 -08 -0800 -08:00 -08 -0800 -08:00 +1996-03-31 07:03:33.123 -08 -0800 -08:00 -08 -0800 -08:00 -08 -0800 -08:00 +2018-11-17 05:33:33.123 -08 -0800 -08:00 -08 -0800 -08:00 -08 -0800 -08:00 +2019-12-31 09:33:33.123 -08 -0800 -08:00 -08 -0800 -08:00 -08 -0800 -08:00 +2100-01-01 01:33:33.123 -08 -0800 -08:00 -08 -0800 -08:00 -08 -0800 -08:00 -- !query -select col, date_format(col, 'XXXX XXXXX') from v +select col, date_format(col, 'XXXX XXXXX'), to_char(col, 'XXXX XXXXX'), to_varchar(col, 'XXXX XXXXX') from v -- !query schema struct<> -- !query output @@ -311,21 +311,21 @@ invalid ISO 8601 format: length=4 -- !query -select col, date_format(col, 'Z ZZ ZZZ ZZZZ ZZZZZ') from v +select col, date_format(col, 'Z ZZ ZZZ ZZZZ ZZZZZ'), to_char(col, 'Z ZZ ZZZ ZZZZ ZZZZZ'), to_varchar(col, 'Z ZZ ZZZ ZZZZ ZZZZZ') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 -0800 -0800 -0800 -0800 -0800 -1969-12-31 15:00:00 -0800 -0800 -0800 -0800 -0800 -1970-12-31 04:59:59.999 -0800 -0800 -0800 -0800 -0800 -1996-03-31 07:03:33.123 -0800 -0800 -0800 -0800 -0800 -2018-11-17 05:33:33.123 -0800 -0800 -0800 -0800 -0800 -2019-12-31 09:33:33.123 -0800 -0800 -0800 -0800 -0800 -2100-01-01 01:33:33.123 -0800 -0800 -0800 -0800 -0800 +1582-05-31 19:40:35.123 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 +1969-12-31 15:00:00 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 +1970-12-31 04:59:59.999 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 +1996-03-31 07:03:33.123 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 +2018-11-17 05:33:33.123 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 +2019-12-31 09:33:33.123 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 +2100-01-01 01:33:33.123 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -0800 -- !query -select col, date_format(col, 'O OOOO') from v +select col, date_format(col, 'O OOOO'), to_char(col, 'O OOOO'), to_varchar(col, 'O OOOO') from v -- !query schema struct<> -- !query output @@ -334,7 +334,7 @@ Illegal pattern character 'O' -- !query -select col, date_format(col, 'x xx xxx xxxx xxxx xxxxx') from v +select col, date_format(col, 'x xx xxx xxxx xxxx xxxxx'), to_char(col, 'x xx xxx xxxx xxxx xxxxx'), to_varchar(col, 'x xx xxx xxxx xxxx xxxxx') from v -- !query schema struct<> -- !query output @@ -343,56 +343,80 @@ Illegal pattern character 'x' -- !query -select col, date_format(col, '[yyyy-MM-dd HH:mm:ss]') from v +select col, date_format(col, '[yyyy-MM-dd HH:mm:ss]'), to_char(col, '[yyyy-MM-dd HH:mm:ss]'), to_varchar(col, '[yyyy-MM-dd HH:mm:ss]') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 [1582-05-31 19:40:35] -1969-12-31 15:00:00 [1969-12-31 15:00:00] -1970-12-31 04:59:59.999 [1970-12-31 04:59:59] -1996-03-31 07:03:33.123 [1996-03-31 07:03:33] -2018-11-17 05:33:33.123 [2018-11-17 05:33:33] -2019-12-31 09:33:33.123 [2019-12-31 09:33:33] -2100-01-01 01:33:33.123 [2100-01-01 01:33:33] +1582-05-31 19:40:35.123 [1582-05-31 19:40:35] [1582-05-31 19:40:35] [1582-05-31 19:40:35] +1969-12-31 15:00:00 [1969-12-31 15:00:00] [1969-12-31 15:00:00] [1969-12-31 15:00:00] +1970-12-31 04:59:59.999 [1970-12-31 04:59:59] [1970-12-31 04:59:59] [1970-12-31 04:59:59] +1996-03-31 07:03:33.123 [1996-03-31 07:03:33] [1996-03-31 07:03:33] [1996-03-31 07:03:33] +2018-11-17 05:33:33.123 [2018-11-17 05:33:33] [2018-11-17 05:33:33] [2018-11-17 05:33:33] +2019-12-31 09:33:33.123 [2019-12-31 09:33:33] [2019-12-31 09:33:33] [2019-12-31 09:33:33] +2100-01-01 01:33:33.123 [2100-01-01 01:33:33] [2100-01-01 01:33:33] [2100-01-01 01:33:33] -- !query -select col, date_format(col, "姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV'") from v +select col, date_format(col, "姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV'"), to_char(col, "姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV'"), to_varchar(col, "姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV'") from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV -1969-12-31 15:00:00 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV -1970-12-31 04:59:59.999 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV -1996-03-31 07:03:33.123 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV -2018-11-17 05:33:33.123 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV -2019-12-31 09:33:33.123 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV -2100-01-01 01:33:33.123 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV +1582-05-31 19:40:35.123 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV +1969-12-31 15:00:00 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV +1970-12-31 04:59:59.999 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV +1996-03-31 07:03:33.123 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV +2018-11-17 05:33:33.123 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV +2019-12-31 09:33:33.123 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV +2100-01-01 01:33:33.123 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV -- !query -select col, date_format(col, "''") from v +select col, date_format(col, "''"), to_char(col, "''"), to_varchar(col, "''") from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 ' -1969-12-31 15:00:00 ' -1970-12-31 04:59:59.999 ' -1996-03-31 07:03:33.123 ' -2018-11-17 05:33:33.123 ' -2019-12-31 09:33:33.123 ' -2100-01-01 01:33:33.123 ' +1582-05-31 19:40:35.123 ' ' ' +1969-12-31 15:00:00 ' ' ' +1970-12-31 04:59:59.999 ' ' ' +1996-03-31 07:03:33.123 ' ' ' +2018-11-17 05:33:33.123 ' ' ' +2019-12-31 09:33:33.123 ' ' ' +2100-01-01 01:33:33.123 ' ' ' -- !query -select col, date_format(col, '') from v +select col, date_format(col, ''), to_char(col, ''), to_varchar(col, '') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 -1969-12-31 15:00:00 -1970-12-31 04:59:59.999 -1996-03-31 07:03:33.123 -2018-11-17 05:33:33.123 -2019-12-31 09:33:33.123 +1582-05-31 19:40:35.123 +1969-12-31 15:00:00 +1970-12-31 04:59:59.999 +1996-03-31 07:03:33.123 +2018-11-17 05:33:33.123 +2019-12-31 09:33:33.123 2100-01-01 01:33:33.123 + + +-- !query +select date_format(date'2023-08-18', 'yyyy-MM-dd'), to_char(date'2023-08-18', 'yyyy-MM-dd'), to_varchar(date'2023-08-18', 'yyyy-MM-dd') +-- !query schema +struct +-- !query output +2023-08-18 2023-08-18 2023-08-18 + + +-- !query +select date_format(timestamp_ltz'2023-08-18 09:13:14.123456Z', 'yyyy-MM-dd HH:mm:ss.SSSSSSZ'), to_char(timestamp_ltz'2023-08-18 09:13:14.123456Z', 'yyyy-MM-dd HH:mm:ss.SSSSSSZ'), to_varchar(timestamp_ltz'2023-08-18 09:13:14.123456Z', 'yyyy-MM-dd HH:mm:ss.SSSSSSZ') +-- !query schema +struct +-- !query output +2023-08-18 02:13:14.000123-0700 2023-08-18 02:13:14.000123-0700 2023-08-18 02:13:14.000123-0700 + + +-- !query +select date_format(timestamp_ntz'2023-08-18 09:13:14.123456', 'yyyy-MM-dd HH:mm:ss.SSSSSS'), to_char(timestamp_ntz'2023-08-18 09:13:14.123456', 'yyyy-MM-dd HH:mm:ss.SSSSSS'), to_varchar(timestamp_ntz'2023-08-18 09:13:14.123456', 'yyyy-MM-dd HH:mm:ss.SSSSSS') +-- !query schema +struct +-- !query output +2023-08-18 09:13:14.000123 2023-08-18 09:13:14.000123 2023-08-18 09:13:14.000123 diff --git a/sql/core/src/test/resources/sql-tests/results/datetime-formatting.sql.out b/sql/core/src/test/resources/sql-tests/results/datetime-formatting.sql.out index cc88874ad3b1d..f659dbf0083d0 100644 --- a/sql/core/src/test/resources/sql-tests/results/datetime-formatting.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/datetime-formatting.sql.out @@ -15,414 +15,438 @@ struct<> -- !query -select col, date_format(col, 'G GG GGG GGGG'), to_char(col, 'G GG GGG GGGG') from v +select col, date_format(col, 'G GG GGG GGGG'), to_char(col, 'G GG GGG GGGG'), to_varchar(col, 'G GG GGG GGGG') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 AD AD AD Anno Domini AD AD AD Anno Domini -1969-12-31 15:00:00 AD AD AD Anno Domini AD AD AD Anno Domini -1970-12-31 04:59:59.999 AD AD AD Anno Domini AD AD AD Anno Domini -1996-03-31 07:03:33.123 AD AD AD Anno Domini AD AD AD Anno Domini -2018-11-17 05:33:33.123 AD AD AD Anno Domini AD AD AD Anno Domini -2019-12-31 09:33:33.123 AD AD AD Anno Domini AD AD AD Anno Domini -2100-01-01 01:33:33.123 AD AD AD Anno Domini AD AD AD Anno Domini +1582-05-31 19:40:35.123 AD AD AD Anno Domini AD AD AD Anno Domini AD AD AD Anno Domini +1969-12-31 15:00:00 AD AD AD Anno Domini AD AD AD Anno Domini AD AD AD Anno Domini +1970-12-31 04:59:59.999 AD AD AD Anno Domini AD AD AD Anno Domini AD AD AD Anno Domini +1996-03-31 07:03:33.123 AD AD AD Anno Domini AD AD AD Anno Domini AD AD AD Anno Domini +2018-11-17 05:33:33.123 AD AD AD Anno Domini AD AD AD Anno Domini AD AD AD Anno Domini +2019-12-31 09:33:33.123 AD AD AD Anno Domini AD AD AD Anno Domini AD AD AD Anno Domini +2100-01-01 01:33:33.123 AD AD AD Anno Domini AD AD AD Anno Domini AD AD AD Anno Domini -- !query -select col, date_format(col, 'y yy yyy yyyy yyyyy yyyyyy'), to_char(col, 'y yy yyy yyyy yyyyy yyyyyy') from v +select col, date_format(col, 'y yy yyy yyyy yyyyy yyyyyy'), to_char(col, 'y yy yyy yyyy yyyyy yyyyyy'), to_varchar(col, 'y yy yyy yyyy yyyyy yyyyyy') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 1582 82 1582 1582 01582 001582 1582 82 1582 1582 01582 001582 -1969-12-31 15:00:00 1969 69 1969 1969 01969 001969 1969 69 1969 1969 01969 001969 -1970-12-31 04:59:59.999 1970 70 1970 1970 01970 001970 1970 70 1970 1970 01970 001970 -1996-03-31 07:03:33.123 1996 96 1996 1996 01996 001996 1996 96 1996 1996 01996 001996 -2018-11-17 05:33:33.123 2018 18 2018 2018 02018 002018 2018 18 2018 2018 02018 002018 -2019-12-31 09:33:33.123 2019 19 2019 2019 02019 002019 2019 19 2019 2019 02019 002019 -2100-01-01 01:33:33.123 2100 00 2100 2100 02100 002100 2100 00 2100 2100 02100 002100 +1582-05-31 19:40:35.123 1582 82 1582 1582 01582 001582 1582 82 1582 1582 01582 001582 1582 82 1582 1582 01582 001582 +1969-12-31 15:00:00 1969 69 1969 1969 01969 001969 1969 69 1969 1969 01969 001969 1969 69 1969 1969 01969 001969 +1970-12-31 04:59:59.999 1970 70 1970 1970 01970 001970 1970 70 1970 1970 01970 001970 1970 70 1970 1970 01970 001970 +1996-03-31 07:03:33.123 1996 96 1996 1996 01996 001996 1996 96 1996 1996 01996 001996 1996 96 1996 1996 01996 001996 +2018-11-17 05:33:33.123 2018 18 2018 2018 02018 002018 2018 18 2018 2018 02018 002018 2018 18 2018 2018 02018 002018 +2019-12-31 09:33:33.123 2019 19 2019 2019 02019 002019 2019 19 2019 2019 02019 002019 2019 19 2019 2019 02019 002019 +2100-01-01 01:33:33.123 2100 00 2100 2100 02100 002100 2100 00 2100 2100 02100 002100 2100 00 2100 2100 02100 002100 -- !query -select col, date_format(col, 'q qq'), to_char(col, 'q qq') from v +select col, date_format(col, 'q qq'), to_char(col, 'q qq'), to_varchar(col, 'q qq') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 2 02 2 02 -1969-12-31 15:00:00 4 04 4 04 -1970-12-31 04:59:59.999 4 04 4 04 -1996-03-31 07:03:33.123 1 01 1 01 -2018-11-17 05:33:33.123 4 04 4 04 -2019-12-31 09:33:33.123 4 04 4 04 -2100-01-01 01:33:33.123 1 01 1 01 +1582-05-31 19:40:35.123 2 02 2 02 2 02 +1969-12-31 15:00:00 4 04 4 04 4 04 +1970-12-31 04:59:59.999 4 04 4 04 4 04 +1996-03-31 07:03:33.123 1 01 1 01 1 01 +2018-11-17 05:33:33.123 4 04 4 04 4 04 +2019-12-31 09:33:33.123 4 04 4 04 4 04 +2100-01-01 01:33:33.123 1 01 1 01 1 01 -- !query -select col, date_format(col, 'Q QQ QQQ QQQQ'), to_char(col, 'Q QQ QQQ QQQQ') from v +select col, date_format(col, 'Q QQ QQQ QQQQ'), to_char(col, 'Q QQ QQQ QQQQ'), to_varchar(col, 'Q QQ QQQ QQQQ') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 2 02 Q2 2nd quarter 2 02 Q2 2nd quarter -1969-12-31 15:00:00 4 04 Q4 4th quarter 4 04 Q4 4th quarter -1970-12-31 04:59:59.999 4 04 Q4 4th quarter 4 04 Q4 4th quarter -1996-03-31 07:03:33.123 1 01 Q1 1st quarter 1 01 Q1 1st quarter -2018-11-17 05:33:33.123 4 04 Q4 4th quarter 4 04 Q4 4th quarter -2019-12-31 09:33:33.123 4 04 Q4 4th quarter 4 04 Q4 4th quarter -2100-01-01 01:33:33.123 1 01 Q1 1st quarter 1 01 Q1 1st quarter +1582-05-31 19:40:35.123 2 02 Q2 2nd quarter 2 02 Q2 2nd quarter 2 02 Q2 2nd quarter +1969-12-31 15:00:00 4 04 Q4 4th quarter 4 04 Q4 4th quarter 4 04 Q4 4th quarter +1970-12-31 04:59:59.999 4 04 Q4 4th quarter 4 04 Q4 4th quarter 4 04 Q4 4th quarter +1996-03-31 07:03:33.123 1 01 Q1 1st quarter 1 01 Q1 1st quarter 1 01 Q1 1st quarter +2018-11-17 05:33:33.123 4 04 Q4 4th quarter 4 04 Q4 4th quarter 4 04 Q4 4th quarter +2019-12-31 09:33:33.123 4 04 Q4 4th quarter 4 04 Q4 4th quarter 4 04 Q4 4th quarter +2100-01-01 01:33:33.123 1 01 Q1 1st quarter 1 01 Q1 1st quarter 1 01 Q1 1st quarter -- !query -select col, date_format(col, 'M MM MMM MMMM'), to_char(col, 'M MM MMM MMMM') from v +select col, date_format(col, 'M MM MMM MMMM'), to_char(col, 'M MM MMM MMMM'), to_varchar(col, 'M MM MMM MMMM') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 5 05 May May 5 05 May May -1969-12-31 15:00:00 12 12 Dec December 12 12 Dec December -1970-12-31 04:59:59.999 12 12 Dec December 12 12 Dec December -1996-03-31 07:03:33.123 3 03 Mar March 3 03 Mar March -2018-11-17 05:33:33.123 11 11 Nov November 11 11 Nov November -2019-12-31 09:33:33.123 12 12 Dec December 12 12 Dec December -2100-01-01 01:33:33.123 1 01 Jan January 1 01 Jan January +1582-05-31 19:40:35.123 5 05 May May 5 05 May May 5 05 May May +1969-12-31 15:00:00 12 12 Dec December 12 12 Dec December 12 12 Dec December +1970-12-31 04:59:59.999 12 12 Dec December 12 12 Dec December 12 12 Dec December +1996-03-31 07:03:33.123 3 03 Mar March 3 03 Mar March 3 03 Mar March +2018-11-17 05:33:33.123 11 11 Nov November 11 11 Nov November 11 11 Nov November +2019-12-31 09:33:33.123 12 12 Dec December 12 12 Dec December 12 12 Dec December +2100-01-01 01:33:33.123 1 01 Jan January 1 01 Jan January 1 01 Jan January -- !query -select col, date_format(col, 'L LL'), to_char(col, 'L LL') from v +select col, date_format(col, 'L LL'), to_char(col, 'L LL'), to_varchar(col, 'L LL') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 5 05 5 05 -1969-12-31 15:00:00 12 12 12 12 -1970-12-31 04:59:59.999 12 12 12 12 -1996-03-31 07:03:33.123 3 03 3 03 -2018-11-17 05:33:33.123 11 11 11 11 -2019-12-31 09:33:33.123 12 12 12 12 -2100-01-01 01:33:33.123 1 01 1 01 +1582-05-31 19:40:35.123 5 05 5 05 5 05 +1969-12-31 15:00:00 12 12 12 12 12 12 +1970-12-31 04:59:59.999 12 12 12 12 12 12 +1996-03-31 07:03:33.123 3 03 3 03 3 03 +2018-11-17 05:33:33.123 11 11 11 11 11 11 +2019-12-31 09:33:33.123 12 12 12 12 12 12 +2100-01-01 01:33:33.123 1 01 1 01 1 01 -- !query -select col, date_format(col, 'E EE EEE EEEE'), to_char(col, 'E EE EEE EEEE') from v +select col, date_format(col, 'E EE EEE EEEE'), to_char(col, 'E EE EEE EEEE'), to_varchar(col, 'E EE EEE EEEE') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 Mon Mon Mon Monday Mon Mon Mon Monday -1969-12-31 15:00:00 Wed Wed Wed Wednesday Wed Wed Wed Wednesday -1970-12-31 04:59:59.999 Thu Thu Thu Thursday Thu Thu Thu Thursday -1996-03-31 07:03:33.123 Sun Sun Sun Sunday Sun Sun Sun Sunday -2018-11-17 05:33:33.123 Sat Sat Sat Saturday Sat Sat Sat Saturday -2019-12-31 09:33:33.123 Tue Tue Tue Tuesday Tue Tue Tue Tuesday -2100-01-01 01:33:33.123 Fri Fri Fri Friday Fri Fri Fri Friday +1582-05-31 19:40:35.123 Mon Mon Mon Monday Mon Mon Mon Monday Mon Mon Mon Monday +1969-12-31 15:00:00 Wed Wed Wed Wednesday Wed Wed Wed Wednesday Wed Wed Wed Wednesday +1970-12-31 04:59:59.999 Thu Thu Thu Thursday Thu Thu Thu Thursday Thu Thu Thu Thursday +1996-03-31 07:03:33.123 Sun Sun Sun Sunday Sun Sun Sun Sunday Sun Sun Sun Sunday +2018-11-17 05:33:33.123 Sat Sat Sat Saturday Sat Sat Sat Saturday Sat Sat Sat Saturday +2019-12-31 09:33:33.123 Tue Tue Tue Tuesday Tue Tue Tue Tuesday Tue Tue Tue Tuesday +2100-01-01 01:33:33.123 Fri Fri Fri Friday Fri Fri Fri Friday Fri Fri Fri Friday -- !query -select col, date_format(col, 'F'), to_char(col, 'F') from v +select col, date_format(col, 'F'), to_char(col, 'F'), to_varchar(col, 'F') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 3 3 -1969-12-31 15:00:00 3 3 -1970-12-31 04:59:59.999 3 3 -1996-03-31 07:03:33.123 3 3 -2018-11-17 05:33:33.123 3 3 -2019-12-31 09:33:33.123 3 3 -2100-01-01 01:33:33.123 1 1 +1582-05-31 19:40:35.123 3 3 3 +1969-12-31 15:00:00 3 3 3 +1970-12-31 04:59:59.999 3 3 3 +1996-03-31 07:03:33.123 3 3 3 +2018-11-17 05:33:33.123 3 3 3 +2019-12-31 09:33:33.123 3 3 3 +2100-01-01 01:33:33.123 1 1 1 -- !query -select col, date_format(col, 'd dd'), to_char(col, 'd dd') from v +select col, date_format(col, 'd dd'), to_char(col, 'd dd'), to_varchar(col, 'd dd') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 31 31 31 31 -1969-12-31 15:00:00 31 31 31 31 -1970-12-31 04:59:59.999 31 31 31 31 -1996-03-31 07:03:33.123 31 31 31 31 -2018-11-17 05:33:33.123 17 17 17 17 -2019-12-31 09:33:33.123 31 31 31 31 -2100-01-01 01:33:33.123 1 01 1 01 +1582-05-31 19:40:35.123 31 31 31 31 31 31 +1969-12-31 15:00:00 31 31 31 31 31 31 +1970-12-31 04:59:59.999 31 31 31 31 31 31 +1996-03-31 07:03:33.123 31 31 31 31 31 31 +2018-11-17 05:33:33.123 17 17 17 17 17 17 +2019-12-31 09:33:33.123 31 31 31 31 31 31 +2100-01-01 01:33:33.123 1 01 1 01 1 01 -- !query -select col, date_format(col, 'DD'), to_char(col, 'DD') from v where col = timestamp '2100-01-01 01:33:33.123America/Los_Angeles' +select col, date_format(col, 'DD'), to_char(col, 'DD'), to_varchar(col, 'DD') from v where col = timestamp '2100-01-01 01:33:33.123America/Los_Angeles' -- !query schema -struct +struct -- !query output -2100-01-01 01:33:33.123 01 01 +2100-01-01 01:33:33.123 01 01 01 -- !query -select col, date_format(col, 'D DDD'), to_char(col, 'D DDD') from v +select col, date_format(col, 'D DDD'), to_char(col, 'D DDD'), to_varchar(col, 'D DDD') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 151 151 151 151 -1969-12-31 15:00:00 365 365 365 365 -1970-12-31 04:59:59.999 365 365 365 365 -1996-03-31 07:03:33.123 91 091 91 091 -2018-11-17 05:33:33.123 321 321 321 321 -2019-12-31 09:33:33.123 365 365 365 365 -2100-01-01 01:33:33.123 1 001 1 001 +1582-05-31 19:40:35.123 151 151 151 151 151 151 +1969-12-31 15:00:00 365 365 365 365 365 365 +1970-12-31 04:59:59.999 365 365 365 365 365 365 +1996-03-31 07:03:33.123 91 091 91 091 91 091 +2018-11-17 05:33:33.123 321 321 321 321 321 321 +2019-12-31 09:33:33.123 365 365 365 365 365 365 +2100-01-01 01:33:33.123 1 001 1 001 1 001 -- !query -select col, date_format(col, 'H HH'), to_char(col, 'H HH') from v +select col, date_format(col, 'H HH'), to_char(col, 'H HH'), to_varchar(col, 'H HH') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 19 19 19 19 -1969-12-31 15:00:00 15 15 15 15 -1970-12-31 04:59:59.999 4 04 4 04 -1996-03-31 07:03:33.123 7 07 7 07 -2018-11-17 05:33:33.123 5 05 5 05 -2019-12-31 09:33:33.123 9 09 9 09 -2100-01-01 01:33:33.123 1 01 1 01 +1582-05-31 19:40:35.123 19 19 19 19 19 19 +1969-12-31 15:00:00 15 15 15 15 15 15 +1970-12-31 04:59:59.999 4 04 4 04 4 04 +1996-03-31 07:03:33.123 7 07 7 07 7 07 +2018-11-17 05:33:33.123 5 05 5 05 5 05 +2019-12-31 09:33:33.123 9 09 9 09 9 09 +2100-01-01 01:33:33.123 1 01 1 01 1 01 -- !query -select col, date_format(col, 'h hh'), to_char(col, 'h hh') from v +select col, date_format(col, 'h hh'), to_char(col, 'h hh'), to_varchar(col, 'h hh') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 7 07 7 07 -1969-12-31 15:00:00 3 03 3 03 -1970-12-31 04:59:59.999 4 04 4 04 -1996-03-31 07:03:33.123 7 07 7 07 -2018-11-17 05:33:33.123 5 05 5 05 -2019-12-31 09:33:33.123 9 09 9 09 -2100-01-01 01:33:33.123 1 01 1 01 +1582-05-31 19:40:35.123 7 07 7 07 7 07 +1969-12-31 15:00:00 3 03 3 03 3 03 +1970-12-31 04:59:59.999 4 04 4 04 4 04 +1996-03-31 07:03:33.123 7 07 7 07 7 07 +2018-11-17 05:33:33.123 5 05 5 05 5 05 +2019-12-31 09:33:33.123 9 09 9 09 9 09 +2100-01-01 01:33:33.123 1 01 1 01 1 01 -- !query -select col, date_format(col, 'k kk'), to_char(col, 'k kk') from v +select col, date_format(col, 'k kk'), to_char(col, 'k kk'), to_varchar(col, 'k kk') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 19 19 19 19 -1969-12-31 15:00:00 15 15 15 15 -1970-12-31 04:59:59.999 4 04 4 04 -1996-03-31 07:03:33.123 7 07 7 07 -2018-11-17 05:33:33.123 5 05 5 05 -2019-12-31 09:33:33.123 9 09 9 09 -2100-01-01 01:33:33.123 1 01 1 01 +1582-05-31 19:40:35.123 19 19 19 19 19 19 +1969-12-31 15:00:00 15 15 15 15 15 15 +1970-12-31 04:59:59.999 4 04 4 04 4 04 +1996-03-31 07:03:33.123 7 07 7 07 7 07 +2018-11-17 05:33:33.123 5 05 5 05 5 05 +2019-12-31 09:33:33.123 9 09 9 09 9 09 +2100-01-01 01:33:33.123 1 01 1 01 1 01 -- !query -select col, date_format(col, 'K KK'), to_char(col, 'K KK') from v +select col, date_format(col, 'K KK'), to_char(col, 'K KK'), to_varchar(col, 'K KK') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 7 07 7 07 -1969-12-31 15:00:00 3 03 3 03 -1970-12-31 04:59:59.999 4 04 4 04 -1996-03-31 07:03:33.123 7 07 7 07 -2018-11-17 05:33:33.123 5 05 5 05 -2019-12-31 09:33:33.123 9 09 9 09 -2100-01-01 01:33:33.123 1 01 1 01 +1582-05-31 19:40:35.123 7 07 7 07 7 07 +1969-12-31 15:00:00 3 03 3 03 3 03 +1970-12-31 04:59:59.999 4 04 4 04 4 04 +1996-03-31 07:03:33.123 7 07 7 07 7 07 +2018-11-17 05:33:33.123 5 05 5 05 5 05 +2019-12-31 09:33:33.123 9 09 9 09 9 09 +2100-01-01 01:33:33.123 1 01 1 01 1 01 -- !query -select col, date_format(col, 'm mm'), to_char(col, 'm mm') from v +select col, date_format(col, 'm mm'), to_char(col, 'm mm'), to_varchar(col, 'm mm') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 40 40 40 40 -1969-12-31 15:00:00 0 00 0 00 -1970-12-31 04:59:59.999 59 59 59 59 -1996-03-31 07:03:33.123 3 03 3 03 -2018-11-17 05:33:33.123 33 33 33 33 -2019-12-31 09:33:33.123 33 33 33 33 -2100-01-01 01:33:33.123 33 33 33 33 +1582-05-31 19:40:35.123 40 40 40 40 40 40 +1969-12-31 15:00:00 0 00 0 00 0 00 +1970-12-31 04:59:59.999 59 59 59 59 59 59 +1996-03-31 07:03:33.123 3 03 3 03 3 03 +2018-11-17 05:33:33.123 33 33 33 33 33 33 +2019-12-31 09:33:33.123 33 33 33 33 33 33 +2100-01-01 01:33:33.123 33 33 33 33 33 33 -- !query -select col, date_format(col, 's ss'), to_char(col, 's ss') from v +select col, date_format(col, 's ss'), to_char(col, 's ss'), to_varchar(col, 's ss') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 35 35 35 35 -1969-12-31 15:00:00 0 00 0 00 -1970-12-31 04:59:59.999 59 59 59 59 -1996-03-31 07:03:33.123 33 33 33 33 -2018-11-17 05:33:33.123 33 33 33 33 -2019-12-31 09:33:33.123 33 33 33 33 -2100-01-01 01:33:33.123 33 33 33 33 +1582-05-31 19:40:35.123 35 35 35 35 35 35 +1969-12-31 15:00:00 0 00 0 00 0 00 +1970-12-31 04:59:59.999 59 59 59 59 59 59 +1996-03-31 07:03:33.123 33 33 33 33 33 33 +2018-11-17 05:33:33.123 33 33 33 33 33 33 +2019-12-31 09:33:33.123 33 33 33 33 33 33 +2100-01-01 01:33:33.123 33 33 33 33 33 33 -- !query -select col, date_format(col, 'S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS'), to_char(col, 'S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS') from v +select col, date_format(col, 'S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS'), to_char(col, 'S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS'), to_varchar(col, 'S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 1 12 123 1230 12300 123000 1230000 12300000 123000000 1 12 123 1230 12300 123000 1230000 12300000 123000000 -1969-12-31 15:00:00 0 00 000 0000 00000 000000 0000000 00000000 000000000 0 00 000 0000 00000 000000 0000000 00000000 000000000 -1970-12-31 04:59:59.999 9 99 999 9990 99900 999000 9990000 99900000 999000000 9 99 999 9990 99900 999000 9990000 99900000 999000000 -1996-03-31 07:03:33.123 1 12 123 1230 12300 123000 1230000 12300000 123000000 1 12 123 1230 12300 123000 1230000 12300000 123000000 -2018-11-17 05:33:33.123 1 12 123 1230 12300 123000 1230000 12300000 123000000 1 12 123 1230 12300 123000 1230000 12300000 123000000 -2019-12-31 09:33:33.123 1 12 123 1230 12300 123000 1230000 12300000 123000000 1 12 123 1230 12300 123000 1230000 12300000 123000000 -2100-01-01 01:33:33.123 1 12 123 1230 12300 123000 1230000 12300000 123000000 1 12 123 1230 12300 123000 1230000 12300000 123000000 +1582-05-31 19:40:35.123 1 12 123 1230 12300 123000 1230000 12300000 123000000 1 12 123 1230 12300 123000 1230000 12300000 123000000 1 12 123 1230 12300 123000 1230000 12300000 123000000 +1969-12-31 15:00:00 0 00 000 0000 00000 000000 0000000 00000000 000000000 0 00 000 0000 00000 000000 0000000 00000000 000000000 0 00 000 0000 00000 000000 0000000 00000000 000000000 +1970-12-31 04:59:59.999 9 99 999 9990 99900 999000 9990000 99900000 999000000 9 99 999 9990 99900 999000 9990000 99900000 999000000 9 99 999 9990 99900 999000 9990000 99900000 999000000 +1996-03-31 07:03:33.123 1 12 123 1230 12300 123000 1230000 12300000 123000000 1 12 123 1230 12300 123000 1230000 12300000 123000000 1 12 123 1230 12300 123000 1230000 12300000 123000000 +2018-11-17 05:33:33.123 1 12 123 1230 12300 123000 1230000 12300000 123000000 1 12 123 1230 12300 123000 1230000 12300000 123000000 1 12 123 1230 12300 123000 1230000 12300000 123000000 +2019-12-31 09:33:33.123 1 12 123 1230 12300 123000 1230000 12300000 123000000 1 12 123 1230 12300 123000 1230000 12300000 123000000 1 12 123 1230 12300 123000 1230000 12300000 123000000 +2100-01-01 01:33:33.123 1 12 123 1230 12300 123000 1230000 12300000 123000000 1 12 123 1230 12300 123000 1230000 12300000 123000000 1 12 123 1230 12300 123000 1230000 12300000 123000000 -- !query -select col, date_format(col, 'a'), to_char(col, 'a') from v +select col, date_format(col, 'a'), to_char(col, 'a'), to_varchar(col, 'a') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 PM PM -1969-12-31 15:00:00 PM PM -1970-12-31 04:59:59.999 AM AM -1996-03-31 07:03:33.123 AM AM -2018-11-17 05:33:33.123 AM AM -2019-12-31 09:33:33.123 AM AM -2100-01-01 01:33:33.123 AM AM +1582-05-31 19:40:35.123 PM PM PM +1969-12-31 15:00:00 PM PM PM +1970-12-31 04:59:59.999 AM AM AM +1996-03-31 07:03:33.123 AM AM AM +2018-11-17 05:33:33.123 AM AM AM +2019-12-31 09:33:33.123 AM AM AM +2100-01-01 01:33:33.123 AM AM AM -- !query -select col, date_format(col, 'VV'), to_char(col, 'VV') from v +select col, date_format(col, 'VV'), to_char(col, 'VV'), to_varchar(col, 'VV') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 America/Los_Angeles America/Los_Angeles -1969-12-31 15:00:00 America/Los_Angeles America/Los_Angeles -1970-12-31 04:59:59.999 America/Los_Angeles America/Los_Angeles -1996-03-31 07:03:33.123 America/Los_Angeles America/Los_Angeles -2018-11-17 05:33:33.123 America/Los_Angeles America/Los_Angeles -2019-12-31 09:33:33.123 America/Los_Angeles America/Los_Angeles -2100-01-01 01:33:33.123 America/Los_Angeles America/Los_Angeles +1582-05-31 19:40:35.123 America/Los_Angeles America/Los_Angeles America/Los_Angeles +1969-12-31 15:00:00 America/Los_Angeles America/Los_Angeles America/Los_Angeles +1970-12-31 04:59:59.999 America/Los_Angeles America/Los_Angeles America/Los_Angeles +1996-03-31 07:03:33.123 America/Los_Angeles America/Los_Angeles America/Los_Angeles +2018-11-17 05:33:33.123 America/Los_Angeles America/Los_Angeles America/Los_Angeles +2019-12-31 09:33:33.123 America/Los_Angeles America/Los_Angeles America/Los_Angeles +2100-01-01 01:33:33.123 America/Los_Angeles America/Los_Angeles America/Los_Angeles -- !query -select col, date_format(col, 'z zz zzz zzzz'), to_char(col, 'z zz zzz zzzz') from v +select col, date_format(col, 'z zz zzz zzzz'), to_char(col, 'z zz zzz zzzz'), to_varchar(col, 'z zz zzz zzzz') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time -1969-12-31 15:00:00 PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time -1970-12-31 04:59:59.999 PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time -1996-03-31 07:03:33.123 PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time -2018-11-17 05:33:33.123 PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time -2019-12-31 09:33:33.123 PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time -2100-01-01 01:33:33.123 PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time +1582-05-31 19:40:35.123 PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time +1969-12-31 15:00:00 PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time +1970-12-31 04:59:59.999 PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time +1996-03-31 07:03:33.123 PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time +2018-11-17 05:33:33.123 PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time +2019-12-31 09:33:33.123 PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time +2100-01-01 01:33:33.123 PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time PST PST PST Pacific Standard Time -- !query -select col, date_format(col, 'X XX XXX'), to_char(col, 'X XX XXX') from v +select col, date_format(col, 'X XX XXX'), to_char(col, 'X XX XXX'), to_varchar(col, 'X XX XXX') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 -0752 -0752 -07:52 -0752 -0752 -07:52 -1969-12-31 15:00:00 -08 -0800 -08:00 -08 -0800 -08:00 -1970-12-31 04:59:59.999 -08 -0800 -08:00 -08 -0800 -08:00 -1996-03-31 07:03:33.123 -08 -0800 -08:00 -08 -0800 -08:00 -2018-11-17 05:33:33.123 -08 -0800 -08:00 -08 -0800 -08:00 -2019-12-31 09:33:33.123 -08 -0800 -08:00 -08 -0800 -08:00 -2100-01-01 01:33:33.123 -08 -0800 -08:00 -08 -0800 -08:00 +1582-05-31 19:40:35.123 -0752 -0752 -07:52 -0752 -0752 -07:52 -0752 -0752 -07:52 +1969-12-31 15:00:00 -08 -0800 -08:00 -08 -0800 -08:00 -08 -0800 -08:00 +1970-12-31 04:59:59.999 -08 -0800 -08:00 -08 -0800 -08:00 -08 -0800 -08:00 +1996-03-31 07:03:33.123 -08 -0800 -08:00 -08 -0800 -08:00 -08 -0800 -08:00 +2018-11-17 05:33:33.123 -08 -0800 -08:00 -08 -0800 -08:00 -08 -0800 -08:00 +2019-12-31 09:33:33.123 -08 -0800 -08:00 -08 -0800 -08:00 -08 -0800 -08:00 +2100-01-01 01:33:33.123 -08 -0800 -08:00 -08 -0800 -08:00 -08 -0800 -08:00 -- !query -select col, date_format(col, 'XXXX XXXXX'), to_char(col, 'XXXX XXXXX') from v +select col, date_format(col, 'XXXX XXXXX'), to_char(col, 'XXXX XXXXX'), to_varchar(col, 'XXXX XXXXX') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 -075258 -07:52:58 -075258 -07:52:58 -1969-12-31 15:00:00 -0800 -08:00 -0800 -08:00 -1970-12-31 04:59:59.999 -0800 -08:00 -0800 -08:00 -1996-03-31 07:03:33.123 -0800 -08:00 -0800 -08:00 -2018-11-17 05:33:33.123 -0800 -08:00 -0800 -08:00 -2019-12-31 09:33:33.123 -0800 -08:00 -0800 -08:00 -2100-01-01 01:33:33.123 -0800 -08:00 -0800 -08:00 +1582-05-31 19:40:35.123 -075258 -07:52:58 -075258 -07:52:58 -075258 -07:52:58 +1969-12-31 15:00:00 -0800 -08:00 -0800 -08:00 -0800 -08:00 +1970-12-31 04:59:59.999 -0800 -08:00 -0800 -08:00 -0800 -08:00 +1996-03-31 07:03:33.123 -0800 -08:00 -0800 -08:00 -0800 -08:00 +2018-11-17 05:33:33.123 -0800 -08:00 -0800 -08:00 -0800 -08:00 +2019-12-31 09:33:33.123 -0800 -08:00 -0800 -08:00 -0800 -08:00 +2100-01-01 01:33:33.123 -0800 -08:00 -0800 -08:00 -0800 -08:00 -- !query -select col, date_format(col, 'Z ZZ ZZZ ZZZZ ZZZZZ'), to_char(col, 'Z ZZ ZZZ ZZZZ ZZZZZ') from v +select col, date_format(col, 'Z ZZ ZZZ ZZZZ ZZZZZ'), to_char(col, 'Z ZZ ZZZ ZZZZ ZZZZZ'), to_varchar(col, 'Z ZZ ZZZ ZZZZ ZZZZZ') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 -0752 -0752 -0752 GMT-07:52:58 -07:52:58 -0752 -0752 -0752 GMT-07:52:58 -07:52:58 -1969-12-31 15:00:00 -0800 -0800 -0800 GMT-08:00 -08:00 -0800 -0800 -0800 GMT-08:00 -08:00 -1970-12-31 04:59:59.999 -0800 -0800 -0800 GMT-08:00 -08:00 -0800 -0800 -0800 GMT-08:00 -08:00 -1996-03-31 07:03:33.123 -0800 -0800 -0800 GMT-08:00 -08:00 -0800 -0800 -0800 GMT-08:00 -08:00 -2018-11-17 05:33:33.123 -0800 -0800 -0800 GMT-08:00 -08:00 -0800 -0800 -0800 GMT-08:00 -08:00 -2019-12-31 09:33:33.123 -0800 -0800 -0800 GMT-08:00 -08:00 -0800 -0800 -0800 GMT-08:00 -08:00 -2100-01-01 01:33:33.123 -0800 -0800 -0800 GMT-08:00 -08:00 -0800 -0800 -0800 GMT-08:00 -08:00 +1582-05-31 19:40:35.123 -0752 -0752 -0752 GMT-07:52:58 -07:52:58 -0752 -0752 -0752 GMT-07:52:58 -07:52:58 -0752 -0752 -0752 GMT-07:52:58 -07:52:58 +1969-12-31 15:00:00 -0800 -0800 -0800 GMT-08:00 -08:00 -0800 -0800 -0800 GMT-08:00 -08:00 -0800 -0800 -0800 GMT-08:00 -08:00 +1970-12-31 04:59:59.999 -0800 -0800 -0800 GMT-08:00 -08:00 -0800 -0800 -0800 GMT-08:00 -08:00 -0800 -0800 -0800 GMT-08:00 -08:00 +1996-03-31 07:03:33.123 -0800 -0800 -0800 GMT-08:00 -08:00 -0800 -0800 -0800 GMT-08:00 -08:00 -0800 -0800 -0800 GMT-08:00 -08:00 +2018-11-17 05:33:33.123 -0800 -0800 -0800 GMT-08:00 -08:00 -0800 -0800 -0800 GMT-08:00 -08:00 -0800 -0800 -0800 GMT-08:00 -08:00 +2019-12-31 09:33:33.123 -0800 -0800 -0800 GMT-08:00 -08:00 -0800 -0800 -0800 GMT-08:00 -08:00 -0800 -0800 -0800 GMT-08:00 -08:00 +2100-01-01 01:33:33.123 -0800 -0800 -0800 GMT-08:00 -08:00 -0800 -0800 -0800 GMT-08:00 -08:00 -0800 -0800 -0800 GMT-08:00 -08:00 -- !query -select col, date_format(col, 'O OOOO'), to_char(col, 'O OOOO') from v +select col, date_format(col, 'O OOOO'), to_char(col, 'O OOOO'), to_varchar(col, 'O OOOO') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 GMT-7:52:58 GMT-07:52:58 GMT-7:52:58 GMT-07:52:58 -1969-12-31 15:00:00 GMT-8 GMT-08:00 GMT-8 GMT-08:00 -1970-12-31 04:59:59.999 GMT-8 GMT-08:00 GMT-8 GMT-08:00 -1996-03-31 07:03:33.123 GMT-8 GMT-08:00 GMT-8 GMT-08:00 -2018-11-17 05:33:33.123 GMT-8 GMT-08:00 GMT-8 GMT-08:00 -2019-12-31 09:33:33.123 GMT-8 GMT-08:00 GMT-8 GMT-08:00 -2100-01-01 01:33:33.123 GMT-8 GMT-08:00 GMT-8 GMT-08:00 +1582-05-31 19:40:35.123 GMT-7:52:58 GMT-07:52:58 GMT-7:52:58 GMT-07:52:58 GMT-7:52:58 GMT-07:52:58 +1969-12-31 15:00:00 GMT-8 GMT-08:00 GMT-8 GMT-08:00 GMT-8 GMT-08:00 +1970-12-31 04:59:59.999 GMT-8 GMT-08:00 GMT-8 GMT-08:00 GMT-8 GMT-08:00 +1996-03-31 07:03:33.123 GMT-8 GMT-08:00 GMT-8 GMT-08:00 GMT-8 GMT-08:00 +2018-11-17 05:33:33.123 GMT-8 GMT-08:00 GMT-8 GMT-08:00 GMT-8 GMT-08:00 +2019-12-31 09:33:33.123 GMT-8 GMT-08:00 GMT-8 GMT-08:00 GMT-8 GMT-08:00 +2100-01-01 01:33:33.123 GMT-8 GMT-08:00 GMT-8 GMT-08:00 GMT-8 GMT-08:00 -- !query -select col, date_format(col, 'x xx xxx xxxx xxxx xxxxx'), to_char(col, 'x xx xxx xxxx xxxx xxxxx') from v +select col, date_format(col, 'x xx xxx xxxx xxxx xxxxx'), to_char(col, 'x xx xxx xxxx xxxx xxxxx'), to_varchar(col, 'x xx xxx xxxx xxxx xxxxx') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 -0752 -0752 -07:52 -075258 -075258 -07:52:58 -0752 -0752 -07:52 -075258 -075258 -07:52:58 -1969-12-31 15:00:00 -08 -0800 -08:00 -0800 -0800 -08:00 -08 -0800 -08:00 -0800 -0800 -08:00 -1970-12-31 04:59:59.999 -08 -0800 -08:00 -0800 -0800 -08:00 -08 -0800 -08:00 -0800 -0800 -08:00 -1996-03-31 07:03:33.123 -08 -0800 -08:00 -0800 -0800 -08:00 -08 -0800 -08:00 -0800 -0800 -08:00 -2018-11-17 05:33:33.123 -08 -0800 -08:00 -0800 -0800 -08:00 -08 -0800 -08:00 -0800 -0800 -08:00 -2019-12-31 09:33:33.123 -08 -0800 -08:00 -0800 -0800 -08:00 -08 -0800 -08:00 -0800 -0800 -08:00 -2100-01-01 01:33:33.123 -08 -0800 -08:00 -0800 -0800 -08:00 -08 -0800 -08:00 -0800 -0800 -08:00 +1582-05-31 19:40:35.123 -0752 -0752 -07:52 -075258 -075258 -07:52:58 -0752 -0752 -07:52 -075258 -075258 -07:52:58 -0752 -0752 -07:52 -075258 -075258 -07:52:58 +1969-12-31 15:00:00 -08 -0800 -08:00 -0800 -0800 -08:00 -08 -0800 -08:00 -0800 -0800 -08:00 -08 -0800 -08:00 -0800 -0800 -08:00 +1970-12-31 04:59:59.999 -08 -0800 -08:00 -0800 -0800 -08:00 -08 -0800 -08:00 -0800 -0800 -08:00 -08 -0800 -08:00 -0800 -0800 -08:00 +1996-03-31 07:03:33.123 -08 -0800 -08:00 -0800 -0800 -08:00 -08 -0800 -08:00 -0800 -0800 -08:00 -08 -0800 -08:00 -0800 -0800 -08:00 +2018-11-17 05:33:33.123 -08 -0800 -08:00 -0800 -0800 -08:00 -08 -0800 -08:00 -0800 -0800 -08:00 -08 -0800 -08:00 -0800 -0800 -08:00 +2019-12-31 09:33:33.123 -08 -0800 -08:00 -0800 -0800 -08:00 -08 -0800 -08:00 -0800 -0800 -08:00 -08 -0800 -08:00 -0800 -0800 -08:00 +2100-01-01 01:33:33.123 -08 -0800 -08:00 -0800 -0800 -08:00 -08 -0800 -08:00 -0800 -0800 -08:00 -08 -0800 -08:00 -0800 -0800 -08:00 -- !query -select col, date_format(col, '[yyyy-MM-dd HH:mm:ss]'), to_char(col, '[yyyy-MM-dd HH:mm:ss]') from v +select col, date_format(col, '[yyyy-MM-dd HH:mm:ss]'), to_char(col, '[yyyy-MM-dd HH:mm:ss]'), to_varchar(col, '[yyyy-MM-dd HH:mm:ss]') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 1582-05-31 19:40:35 1582-05-31 19:40:35 -1969-12-31 15:00:00 1969-12-31 15:00:00 1969-12-31 15:00:00 -1970-12-31 04:59:59.999 1970-12-31 04:59:59 1970-12-31 04:59:59 -1996-03-31 07:03:33.123 1996-03-31 07:03:33 1996-03-31 07:03:33 -2018-11-17 05:33:33.123 2018-11-17 05:33:33 2018-11-17 05:33:33 -2019-12-31 09:33:33.123 2019-12-31 09:33:33 2019-12-31 09:33:33 -2100-01-01 01:33:33.123 2100-01-01 01:33:33 2100-01-01 01:33:33 +1582-05-31 19:40:35.123 1582-05-31 19:40:35 1582-05-31 19:40:35 1582-05-31 19:40:35 +1969-12-31 15:00:00 1969-12-31 15:00:00 1969-12-31 15:00:00 1969-12-31 15:00:00 +1970-12-31 04:59:59.999 1970-12-31 04:59:59 1970-12-31 04:59:59 1970-12-31 04:59:59 +1996-03-31 07:03:33.123 1996-03-31 07:03:33 1996-03-31 07:03:33 1996-03-31 07:03:33 +2018-11-17 05:33:33.123 2018-11-17 05:33:33 2018-11-17 05:33:33 2018-11-17 05:33:33 +2019-12-31 09:33:33.123 2019-12-31 09:33:33 2019-12-31 09:33:33 2019-12-31 09:33:33 +2100-01-01 01:33:33.123 2100-01-01 01:33:33 2100-01-01 01:33:33 2100-01-01 01:33:33 -- !query -select col, date_format(col, "姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV'"), to_char(col, "姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV'") from v +select col, date_format(col, "姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV'"), to_char(col, "姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV'"), to_varchar(col, "姚123'GyYqQMLwWuEFDdhHmsSaVzZxXOV'") from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV -1969-12-31 15:00:00 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV -1970-12-31 04:59:59.999 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV -1996-03-31 07:03:33.123 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV -2018-11-17 05:33:33.123 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV -2019-12-31 09:33:33.123 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV -2100-01-01 01:33:33.123 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV +1582-05-31 19:40:35.123 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV +1969-12-31 15:00:00 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV +1970-12-31 04:59:59.999 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV +1996-03-31 07:03:33.123 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV +2018-11-17 05:33:33.123 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV +2019-12-31 09:33:33.123 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV +2100-01-01 01:33:33.123 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV 姚123GyYqQMLwWuEFDdhHmsSaVzZxXOV -- !query -select col, date_format(col, "''"), to_char(col, "''") from v +select col, date_format(col, "''"), to_char(col, "''"), to_varchar(col, "''") from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 ' ' -1969-12-31 15:00:00 ' ' -1970-12-31 04:59:59.999 ' ' -1996-03-31 07:03:33.123 ' ' -2018-11-17 05:33:33.123 ' ' -2019-12-31 09:33:33.123 ' ' -2100-01-01 01:33:33.123 ' ' +1582-05-31 19:40:35.123 ' ' ' +1969-12-31 15:00:00 ' ' ' +1970-12-31 04:59:59.999 ' ' ' +1996-03-31 07:03:33.123 ' ' ' +2018-11-17 05:33:33.123 ' ' ' +2019-12-31 09:33:33.123 ' ' ' +2100-01-01 01:33:33.123 ' ' ' -- !query -select col, date_format(col, ''), to_char(col, '') from v +select col, date_format(col, ''), to_char(col, ''), to_varchar(col, '') from v -- !query schema -struct +struct -- !query output -1582-05-31 19:40:35.123 -1969-12-31 15:00:00 -1970-12-31 04:59:59.999 -1996-03-31 07:03:33.123 -2018-11-17 05:33:33.123 -2019-12-31 09:33:33.123 +1582-05-31 19:40:35.123 +1969-12-31 15:00:00 +1970-12-31 04:59:59.999 +1996-03-31 07:03:33.123 +2018-11-17 05:33:33.123 +2019-12-31 09:33:33.123 2100-01-01 01:33:33.123 + + +-- !query +select date_format(date'2023-08-18', 'yyyy-MM-dd'), to_char(date'2023-08-18', 'yyyy-MM-dd'), to_varchar(date'2023-08-18', 'yyyy-MM-dd') +-- !query schema +struct +-- !query output +2023-08-18 2023-08-18 2023-08-18 + + +-- !query +select date_format(timestamp_ltz'2023-08-18 09:13:14.123456Z', 'yyyy-MM-dd HH:mm:ss.SSSSSSZ'), to_char(timestamp_ltz'2023-08-18 09:13:14.123456Z', 'yyyy-MM-dd HH:mm:ss.SSSSSSZ'), to_varchar(timestamp_ltz'2023-08-18 09:13:14.123456Z', 'yyyy-MM-dd HH:mm:ss.SSSSSSZ') +-- !query schema +struct +-- !query output +2023-08-18 02:13:14.123456-0700 2023-08-18 02:13:14.123456-0700 2023-08-18 02:13:14.123456-0700 + + +-- !query +select date_format(timestamp_ntz'2023-08-18 09:13:14.123456', 'yyyy-MM-dd HH:mm:ss.SSSSSS'), to_char(timestamp_ntz'2023-08-18 09:13:14.123456', 'yyyy-MM-dd HH:mm:ss.SSSSSS'), to_varchar(timestamp_ntz'2023-08-18 09:13:14.123456', 'yyyy-MM-dd HH:mm:ss.SSSSSS') +-- !query schema +struct +-- !query output +2023-08-18 09:13:14.123456 2023-08-18 09:13:14.123456 2023-08-18 09:13:14.123456 From bfb93579e86ef9f490fb53bed79f0ee5788502e2 Mon Sep 17 00:00:00 2001 From: Max Gekk Date: Fri, 18 Aug 2023 14:37:23 +0300 Subject: [PATCH 9/9] Add an example --- .../catalyst/expressions/numberFormatExpressions.scala | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/numberFormatExpressions.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/numberFormatExpressions.scala index c955688574f2a..3a424ac21c50e 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/numberFormatExpressions.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/numberFormatExpressions.scala @@ -182,12 +182,13 @@ case class TryToNumber(left: Expression, right: Expression) } /** - * A function that converts decimal values to strings, returning NULL if the decimal value fails to + * A function that converts decimal/datetime values to strings, returning NULL if the value fails to * match the format string. */ +// scalastyle:off line.size.limit @ExpressionDescription( usage = """ - _FUNC_(numberExpr, formatExpr) - Convert `numberExpr` to a string based on the `formatExpr`. + _FUNC_(expr, format) - Convert `expr` to a string based on the `format`. Throws an exception if the conversion fails. The format can consist of the following characters, case insensitive: '0' or '9': Specifies an expected digit between 0 and 9. A sequence of 0 or 9 in the format @@ -207,6 +208,7 @@ case class TryToNumber(left: Expression, right: Expression) 'PR': Only allowed at the end of the format string; specifies that the result string will be wrapped by angle brackets if the input value is negative. ('<1>'). + If `expr` is a datetime, `format` shall be a valid datetime pattern, see Datetime Patterns. """, examples = """ Examples: @@ -220,9 +222,12 @@ case class TryToNumber(left: Expression, right: Expression) $78.12 > SELECT _FUNC_(-12454.8, '99G999D9S'); 12,454.8- + > SELECT _FUNC_(date'2016-04-08', 'y'); + 2016 """, since = "3.4.0", group = "string_funcs") +// scalastyle:on line.size.limit object ToCharacterBuilder extends ExpressionBuilder { override def build(funcName: String, expressions: Seq[Expression]): Expression = { val numArgs = expressions.length