Microsoft SQL Server日期列转104格式出现转换报错问题求解
报错原因
你的date_column为nvarchar字符串类型,执行date_column - 2运算时,SQL Server会尝试将该列所有值隐式转换为int类型,遇到08-09-2017这类带横杠的字符串时转换失败,触发报错。
修正后的查询语句
SELECT date_column, CASE WHEN [date_column] LIKE '%-%' -- 处理dd-mm-yyyy格式的字符串,104为dd.mm.yyyy格式码,此处转换为date类型 THEN TRY_CONVERT(date, date_column, 104) ELSE -- 先尝试将字符串转为int格式的序列日期,再通过DATEADD计算对应日期 TRY_CONVERT(date, DATEADD(day, TRY_CAST(date_column AS INT) - 2, '1900-01-01')) END AS converted_date FROM xyz;
补充说明
- 如果你需要最终输出为
yyyy-mm-dd格式的字符串,可以在外层增加转换逻辑:CONVERT(varchar(10), 上述CASE逻辑的输出值, 23),格式码23对应yyyy-mm-dd标准格式。 - 语句中所有转换均使用
TRY_前缀的函数,遇到无法识别的异常值会返回NULL,不会导致整个查询崩溃,你可以根据业务需求调整异常值的处理规则。
内容的提问来源于stack exchange,提问作者DataAnalystAT
相关产品推荐
相关产品推荐

