在SSMS中如何将VARCHAR类型'MMM-dd-yyyy'转为DATE类型'yyyymmdd'?
解决SSMS中VARCHAR日期转DATE并格式化的问题
错误原因
你使用的CONVERT第三个参数112对应的是输入格式为'yyyymmdd',但你的输入是'MMM-dd-yyyy'(英文月份缩写+连字符格式),格式不匹配导致转换失败。
解决方案
要实现将'MMM-dd-yyyy'格式的字符串转换为'yyyymmdd'格式的结果,需要分两步:先把字符串转成DATE类型,再将DATE类型格式化为目标字符串格式。以下是两种可行方法:
方法一:用PARSE识别英文月份格式
SELECT CONVERT(VARCHAR(8), PARSE('JAN-01-2025' AS DATE USING 'en-US'), 112) AS ConvertedDate
PARSE('JAN-01-2025' AS DATE USING 'en-US'):基于英文语言环境,直接识别'MMM-dd-yyyy'格式的字符串并转为DATE类型CONVERT(VARCHAR(8), ..., 112):将DATE类型转为'yyyymmdd'格式的字符串
方法二:调整字符串格式后用CONVERT转换
SELECT CONVERT(VARCHAR(8), CONVERT(DATE, REPLACE('JAN-01-2025', '-', ' '), 100), 112) AS ConvertedDate
REPLACE('JAN-01-2025', '-', ' '):把原字符串的连字符替换为空格,得到'JAN 01 2025'CONVERT(DATE, ..., 100):用style 100(对应'mon dd yyyy'格式)将调整后的字符串转为DATE类型- 最后一步
CONVERT同样用style 112输出目标格式
批量数据处理建议
如果是处理表中的批量数据,推荐使用TRY_CONVERT或TRY_PARSE,避免单个错误值导致整个查询失败:
SELECT OriginalDate, TRY_CONVERT(VARCHAR(8), TRY_PARSE(OriginalDate AS DATE USING 'en-US'), 112) AS ConvertedDate FROM YourTable
转换失败的行会返回NULL,而非直接抛出错误。
内容的提问来源于stack exchange,提问作者BTurkeli
相关产品推荐
相关产品推荐

