日期列格式转换:将'dd-mmm-yyy'转'yyyy-mm-dd'时format_date报错
解决方案
问题出在直接用format_date处理字符串日期——该函数要求输入是日期类型而非未解析的字符串,且你的日期格式(dd-mmm-yy)不符合默认解析规则,因此触发报错。正确流程是先将字符串解析为日期类型,再重新格式化。
不同工具的实现示例
1. BigQuery SQL
SELECT FORMAT_DATE('%Y-%m-%d', PARSE_DATE('%d-%b-%y', date_column)) AS formatted_date FROM your_table
PARSE_DATE('%d-%b-%y', date_column):将dd-mmm-yy格式的字符串解析为日期类型,%b匹配三位字母月份(不区分大小写),%y匹配两位年份FORMAT_DATE('%Y-%m-%d', ...):将解析后的日期转为yyyy-mm-dd格式
2. PySpark
from pyspark.sql.functions import to_date, date_format df = df.withColumn( "formatted_date", date_format(to_date("date_column", "dd-MMM-yy"), "yyyy-MM-dd") )
to_date("date_column", "dd-MMM-yy"):按指定格式解析字符串为日期date_format(...):将日期转为目标格式
3. PostgreSQL
SELECT TO_CHAR(TO_DATE(date_column, 'DD-Mon-YY'), 'YYYY-MM-DD') AS formatted_date FROM your_table
TO_DATE(date_column, 'DD-Mon-YY'):解析字符串为日期TO_CHAR(..., 'YYYY-MM-DD'):格式化日期为目标字符串
注意事项
- 两位年份补全规则:多数工具默认将
00-69映射为2000-2069,70-99映射为1970-1999,若需自定义年份映射需额外处理 - 月份大小写:
%b(SQL)或MMM(Spark)不区分大小写,无需单独转换月份字母的大小写
内容的提问来源于stack exchange,提问作者Connor Hill
相关产品推荐
相关产品推荐

