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
相关产品推荐
相关产品推荐

