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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 01:52:39