You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Databricks SQL中将特定格式字符串转换为日期(yyyy-MM-dd)失败求助

解决日期格式转换返回NULL的问题

嘿,这个问题我之前处理过好几次!你遇到的NULL问题,本质是cast或to_date默认的日期解析格式和你的输入文本(5/30/2021 9:35:18 AM)不匹配,数据库没法识别这个字符串对应的日期,所以返回了NULL。核心思路是明确指定输入文本的日期格式模型,先让数据库正确解析成日期类型,再转换成你想要的yyyy-MM-dd格式。

下面是主流数据库的具体实现:

MySQL

用STR_TO_DATE先将字符串解析为日期时间类型,再用DATE_FORMAT输出目标格式:

SELECT DATE_FORMAT(
    STR_TO_DATE('5/30/2021 9:35:18 AM', '%m/%d/%Y %h:%i:%s %p'),
    '%Y-%m-%d'
) AS formatted_date;
  • 格式符说明:%m是两位数字月份,%d是两位数字日期,%Y是四位年份,%h是12小时制的小时,%i是分钟,%s是秒,%p匹配AM/PM标识。

PostgreSQL

可以用TO_TIMESTAMP解析字符串为时间戳,再用TO_CHAR转换格式;也可以直接用TO_DATE指定格式后转成DATE类型:

-- 方法1:转成字符串格式
SELECT TO_CHAR(
    TO_TIMESTAMP('5/30/2021 9:35:18 AM', 'MM/DD/YYYY HH12:MI:SS AM'),
    'YYYY-MM-DD'
) AS formatted_date;

-- 方法2:转成DATE类型(默认显示为yyyy-MM-dd)
SELECT TO_DATE('5/30/2021 9:35:18 AM', 'MM/DD/YYYY HH12:MI:SS AM')::DATE AS formatted_date;

SQL Server

用TRY_CONVERT先安全解析为日期类型(避免解析失败报错),再用CONVERT或FORMAT输出目标格式:

-- 方法1:用CONVERT指定样式(性能更好)
SELECT CONVERT(VARCHAR, TRY_CONVERT(DATETIME, '5/30/2021 9:35:18 AM', 101), 23) AS formatted_date;
-- 101对应MM/DD/YYYY样式,23对应YYYY-MM-DD样式

-- 方法2:用FORMAT函数(更直观,适合小数据量)
SELECT FORMAT(TRY_CONVERT(DATETIME, '5/30/2021 9:35:18 AM'), 'yyyy-MM-dd') AS formatted_date;

Oracle

用TO_DATE指定格式模型解析字符串,再用TO_CHAR输出目标格式;或者用TRUNC截断时间部分得到日期:

-- 方法1:转成字符串格式
SELECT TO_CHAR(
    TO_DATE('5/30/2021 9:35:18 AM', 'MM/DD/YYYY HH:MI:SS AM'),
    'YYYY-MM-DD'
) AS formatted_date FROM DUAL;

-- 方法2:截断时间得到DATE类型(显示为yyyy-MM-dd)
SELECT TRUNC(TO_DATE('5/30/2021 9:35:18 AM', 'MM/DD/YYYY HH:MI:SS AM')) AS formatted_date FROM DUAL;

总的来说,只要你告诉数据库你的输入字符串是MM/DD/YYYY HH12:MI:SS AM这种格式,它就能正确解析,之后转换格式就很简单啦!

内容的提问来源于stack exchange,提问作者Tinkerbelle_codes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 21:02:43