适用于:
Databricks SQL
Databricks Runtime
返回使用可选格式设置将 expr 转换为日期后的值。
语法
to_date(expr [, fmt] )
参数
-
expr:表示日期的 STRING 表达式。 - fmt:一个可选格式 STRING 表达式。
返回
一个日期。
如果提供了 fmt,则它必须符合日期/时间模式。
如果未提供 fmt,则此函数是 cast(expr AS DATE) 的同义函数。
如果fmt格式不正确或应用程序不会导致格式正确的日期,则Azure Databricks引发错误。
若要在
常见错误原因和解决方法
to_date 在以下情况下引发错误:
-
输入字符串与预期的格式不匹配:
fmt如果未指定,则输入必须采用yyyy-MM-dd或yyyy-MM-dd HH:mm:ss格式。 如果数据使用不同的格式,例如dd/MM/yyyy或MM-dd-yyyy指定匹配fmt参数。 请参阅所有支持的模式字母 的 Datetime 模式 。 -
输入字符串包含无效的日期值:例如,需要数字的月份
13、日32或非数字字符。 - 格式字符串使用不受支持的模式字母:有关支持的符号和格式规则,请参阅 Datetime 模式 。
错误条件
-
CAST_INVALID_INPUT:在未
fmt提供时引发,并且无法将输入字符串分析为日期。 -
CANNOT_PARSE_TIMESTAMP:提供时
fmt引发,但输入字符串与给定格式模式不匹配。
注意
在 Databricks Runtime 中,如果 spark.sql.ansi.enabled 为 false,则函数返回 NULL 而不是日期格式错误的消息。
示例
-- Parsing with default format (yyyy-MM-dd)
> SELECT to_date('2009-07-30 04:17:52');
2009-07-30
-- Parsing with an explicit format
> SELECT to_date('2016-12-31', 'yyyy-MM-dd');
2016-12-31
-- Parsing a non-default date format
> SELECT to_date('31/12/2016', 'dd/MM/yyyy');
2016-12-31
-- Error: input is not a valid date string
> SELECT to_date('not-a-date');
Error: CAST_INVALID_INPUT
-- Error: input format doesn't match the default yyyy-MM-dd format
> SELECT to_date('31/12/2016');
Error: CAST_INVALID_INPUT
-- Fix: supply a fmt that matches the input format
> SELECT to_date('31/12/2016', 'dd/MM/yyyy');
2016-12-31
-- Use try_cast to return NULL instead of an error for invalid input
> SELECT try_cast('not-a-date' AS DATE);
NULL