PySpark或SparkSQL中的日期格式转换问题求助
解决日期格式转换问题:从3/2/2021 18:48到2021-03-02
嘿,我来帮你搞定这个日期格式转换的问题!直接截取子串确实容易踩坑——比如遇到月份或日期是个位数/两位数混合的情况时,固定位置截取就会出错。更靠谱的思路是先把原始字符串解析成标准的日期对象,再按目标格式输出,这样能自动处理补零、格式识别的问题。下面给你几种常用场景的具体方案:
Python 实现
Python的datetime模块是处理这类问题的首选,代码简洁又鲁棒:
from datetime import datetime # 原始日期字符串 original_str = "3/2/2021 18:48" # 解析成日期对象:%m是带/不带前导零的月,%d是带/不带前导零的日 parsed_date = datetime.strptime(original_str, "%m/%d/%Y %H:%M") # 格式化为目标格式:%Y-%m-%d 自动补零 target_str = parsed_date.strftime("%Y-%m-%d") print(target_str) # 输出:2021-03-02
如果你的原始日期是日/月/年的顺序,只需要把解析格式改成%d/%m/%Y %H:%M就行。
MySQL 实现
用STR_TO_DATE解析原始字符串,再用DATE_FORMAT输出目标格式:
SELECT DATE_FORMAT(STR_TO_DATE('3/2/2021 18:48', '%c/%e/%Y %H:%i'), '%Y-%m-%d') AS formatted_date;
参数说明:
%c:不带前导零的月份(1-12)%e:不带前导零的日期(1-31)%H:%i:24小时制的时分格式
SQL Server 实现
用两次CONVERT函数,先转日期再转字符串:
SELECT CONVERT(VARCHAR(10), CONVERT(DATETIME, '3/2/2021 18:48', 101), 23) AS formatted_date;
参数说明:
101:指定原始字符串是mm/dd/yyyy格式23:指定输出格式为yyyy-mm-dd
Excel 实现
假设日期在A1单元格:
- 如果A1已经是日期格式,直接用
TEXT函数:=TEXT(A1, "yyyy-mm-dd") - 如果A1是纯文本,先转成日期再格式化:
=TEXT(DATEVALUE(A1), "yyyy-mm-dd")
这些方法都能避免截取子串的局限性,不管原始日期的月/日是一位数还是两位数,都能正确输出带前导零的目标格式。
内容的提问来源于stack exchange,提问作者data_optimus
相关产品推荐
相关产品推荐

