如何在SQL中将nvarchar类型的日期字符串转换为指定格式日期?
问题解决方法
你的核心问题是nvarchar类型的F2列存储的是MMDDYYYY格式的字符串(如09222018),SQL无法直接识别这种格式为日期,且你的两种写法存在语法/逻辑错误,以下是正确的解决方案:
错误原因分析
- 第一种
CAST语句:语法错误,CAST的正确格式是CAST(表达式 AS 类型),你多写了一个逗号;即便修正语法,09222018不是SQL默认识别的日期格式,依然会转换失败。 - 第二种
CONVERT语句:逻辑错误,第一个参数应该是目标日期类型(而非nvarchar),且没有对应MMDDYYYY格式的style参数,直接转换无法生效。
正确实现方案
需要先将MMDDYYYY格式的字符串拼接为SQL可识别的日期格式,再转换为日期类型,最后按需格式化为MM/DD/YYYY的字符串。
方法1:字符串拆分拼接
SELECT f2, -- 转换为日期类型 CAST(LEFT(f2,2) + '/' + SUBSTRING(f2,3,2) + '/' + RIGHT(f2,4) AS datetime) AS converted_date, -- 直接显示为09/22/2018格式的字符串 CONVERT(nvarchar, CAST(LEFT(f2,2) + '/' + SUBSTRING(f2,3,2) + '/' + RIGHT(f2,4) AS datetime), 101) AS formatted_date FROM Testbk
方法2:用STUFF函数插入分隔符(更简洁)
SELECT f2, -- 转换为日期类型 CAST(STUFF(STUFF(f2,5,0,'/'),3,0,'/') AS datetime) AS converted_date, -- 直接显示为09/22/2018格式的字符串 CONVERT(nvarchar, CAST(STUFF(STUFF(f2,5,0,'/'),3,0,'/') AS datetime), 101) AS formatted_date FROM Testbk
说明:STUFF(f2,3,0,'/')会在第3位插入/,把09222018变成09/222018,再嵌套一次STUFF(...,5,0,'/')就变成09/22/2018,此时SQL可以识别为日期格式。
内容的提问来源于stack exchange,提问作者bk171
相关产品推荐
相关产品推荐

