如何将MM/DD/YYYY HH:MM格式的CHAR转换为可用Date类型?
解决MM/DD/YYYY HH:MM格式字符串转Date类型的问题
以下是不同主流SQL数据库的可行转换方案,针对你的示例值11/04/2021 12:00测试有效:
SQL Server
你提到用CONVERT/CAST未果,核心是要指定匹配格式的style参数(CAST不支持style,需用CONVERT):
-- 直接转换为DATE类型,自动忽略时间部分 SELECT CONVERT(DATE, '11/04/2021 12:00', 101) AS ConvertedDate; -- 处理可能存在的无效格式值,避免报错返回NULL SELECT TRY_CONVERT(DATE, 你的列名, 101) AS ConvertedDate;
说明:style=101对应MM/DD/YYYY格式,转换时会自动截断时间部分提取日期。
MySQL
使用STR_TO_DATE函数指定格式匹配字符串,再转DATE类型:
-- 先解析为datetime再转date SELECT CAST(STR_TO_DATE('11/04/2021 12:00', '%m/%d/%Y %H:%i') AS DATE) AS ConvertedDate; -- 直接提取日期(STR_TO_DATE返回datetime,MySQL会隐式转换为date) SELECT STR_TO_DATE('11/04/2021 12:00', '%m/%d/%Y %H:%i') AS ConvertedDate;
PostgreSQL
通过TO_DATE函数指定格式模板完成转换:
SELECT TO_DATE('11/04/2021 12:00', 'MM/DD/YYYY HH24:MI') AS ConvertedDate; -- 或者先转时间戳再转date SELECT CAST(TO_TIMESTAMP('11/04/2021 12:00', 'MM/DD/YYYY HH24:MI') AS DATE) AS ConvertedDate;
注意事项
- 如果你的列存在格式不规范的值(比如月份超过12、日期超过当月天数),转换会报错。可以用对应数据库的容错函数(如SQL Server的
TRY_CONVERT、MySQL的STR_TO_DATE配合IFNULL)处理。 - 若要永久将列改为DATE类型,确保转换验证通过后,执行
ALTER TABLE修改列类型:
-- SQL Server示例 ALTER TABLE 你的表名 ALTER COLUMN 你的列名 DATE;
内容的提问来源于stack exchange,提问作者Zachqwerty
相关产品推荐
相关产品推荐

