PySpark SQL中yyyy_MM格式字符串转日期类型返回null如何解决
问题根因
原语句返回null的核心原因是源字符串的日期格式和UNIX_TIMESTAMP指定的解析格式不匹配:你的源date列是yyyy_MM格式(下划线分隔年月,无日期),但你传入的解析格式为yyyy-MM-01(减号分隔,自带日期位),格式不匹配导致解析失败。
解决方案
以下两种写法均适用于Hive/Spark SQL环境,最终返回的Date列为标准日期类型:
- 字符串替换拼接法(写法更直观,兼容性好)
%sql SELECT Col1,Col2,Col3,Col4, TO_DATE(CONCAT(REPLACE(date, '_', '-'), '-01')) AS Date, sales FROM db.table
逻辑说明:先把源字符串的下划线替换为减号,再拼接-01补全日期位,最后直接转成日期类型即可。
- 适配格式的UNIX_TIMESTAMP写法
%sql SELECT Col1,Col2,Col3,Col4, TO_DATE( CAST(UNIX_TIMESTAMP(date, 'yyyy_MM') AS TIMESTAMP) ) AS Date, sales FROM db.table
逻辑说明:给UNIX_TIMESTAMP传入和源数据完全匹配的yyyy_MM解析格式,解析时会默认补全当月1号的时间戳,再转成日期类型即可。
内容的提问来源于stack exchange,提问作者Nabia Salman
相关产品推荐
相关产品推荐

