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

SQL Server中VARCHAR日期'19-09-2020'转'2020-09-19'的方法

解决SQL Server中VARCHAR日期格式转换问题

嘿,我来帮你搞定这个日期格式转换的问题~你之前执行的select convert(varchar, '19-09-2020', 23)没成功,是因为CONVERT函数的样式参数(第三个值)是针对日期/时间类型生效的,你直接传入字符串的话,SQL Server没法识别这个样式规则,所以得先把字符串转成日期类型,再转换成你想要的格式。

下面给你几种可行的解决方案:

方法一:两次CONVERT转换(最常用)

先把字符串按dd-mm-yyyy格式转成DATE类型,再转成yyyy-mm-dd的字符串格式:

SELECT CONVERT(VARCHAR(10), CONVERT(DATE, '19-09-2020', 105), 23)

这里的105是SQL Server对应dd-mm-yyyy格式的样式码,23则对应yyyy-mm-dd的样式码,这样就能得到你要的2020-09-19结果啦。

方法二:用TRY_CONVERT避免转换报错

如果你的数据库里可能存在格式不正确的日期字符串,推荐用TRY_CONVERT,它在转换失败时会返回NULL,而不是直接抛出错误:

SELECT TRY_CONVERT(VARCHAR(10), TRY_CONVERT(DATE, '19-09-2020', 105), 23)

方法三:用PARSE指定文化解析

你也可以用PARSE函数,通过指定文化参数来解析dd-mm-yyyy格式的字符串,比如意大利文化(it-IT)默认就是这个日期格式:

SELECT CONVERT(VARCHAR(10), PARSE('19-09-2020' AS DATE USING 'it-IT'), 23)

同样,TRY_PARSE可以处理转换失败的情况:

SELECT CONVERT(VARCHAR(10), TRY_PARSE('19-09-2020' AS DATE USING 'it-IT'), 23)

如果要更新表中的数据

假设你的表名叫YourTable,存储日期的列名叫DateColumn,可以用下面的语句批量转换:

UPDATE YourTable
SET DateColumn = CONVERT(VARCHAR(10), CONVERT(DATE, DateColumn, 105), 23)
WHERE ISDATE(CONVERT(DATE, DateColumn, 105)) = 1

WHERE条件能确保只更新那些可以正确转换的行,避免脏数据导致更新失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 12:22:48