Databricks中如何将特定格式字符串列转换为Timestamp?
解决Databricks字符串转Timestamp的方案
核心方法:使用to_timestamp指定匹配格式
你的字符串格式是英文月份全称 + 日期(带逗号) + 年份 + 两个空格 + 12小时制时间 + AM/PM,必须用完全匹配的格式掩码才能转换成功,Spark SQL对应格式规则如下:
MMMM:匹配英文月份全称(如January)d:匹配1-2位数字的日期(如1)yyyy:匹配4位年份hh:mm:ss a:匹配12小时制时间及上午/下午标识- 注意原字符串中日期与时间之间是两个空格,格式掩码里也要对应写两个空格
1. 先验证转换结果
SELECT to_timestamp(your_date_str_col, 'MMMM d, yyyy hh:mm:ss a') AS converted_timestamp FROM your_table;
2. 添加新Timestamp列并写入数据
方法一:ALTER TABLE新增列并更新
-- 新增Timestamp类型列 ALTER TABLE your_table ADD COLUMN converted_ts TIMESTAMP; -- 填充转换后的数据 UPDATE your_table SET converted_ts = to_timestamp(your_date_str_col, 'MMMM d, yyyy hh:mm:ss a');
方法二:创建新表(适合一次性转换)
CREATE TABLE new_table AS SELECT *, to_timestamp(your_date_str_col, 'MMMM d, yyyy hh:mm:ss a') AS converted_ts FROM your_table;
常见失败原因排查
- 格式掩码不匹配:比如遗漏日期后的逗号、时间前的两个空格,或者误将
hh(12小时制)写成HH(24小时制) - 存在脏数据:部分字符串格式与示例不一致会返回NULL,可用
WHERE converted_ts IS NULL筛选异常数据单独处理
内容的提问来源于stack exchange,提问作者Ora Clesismo
相关产品推荐
相关产品推荐

