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

SQL Server 2022含EDT的nvarchar日期转datetime报错解决

解决SQL Server中将特定格式字符串转换为datetime的问题

你的转换语句失败主要有两个原因:

  • 部分行的时间格式存在错误(比如示例里的20:25:22 :233,秒和毫秒之间多了空格),仅移除EDT后仍不符合datetime的格式要求
  • 未处理转换失败场景,一旦遇到坏数据就会直接报错

针对你的需求,结合SQL Server 2022的特性,提供以下解决方案:

方案1:清理格式后安全转换

用TRY_CAST替代CAST,遇到无法转换的字符串时返回NULL而非报错,同时嵌套REPLACE修复格式问题,通过LEFT和CHARINDEX精准截取EDT之前的内容:

SELECT 
    MyDateValues,
    TRY_CAST(
        REPLACE(
            -- 截取EDT之前的内容并去除右侧空格
            RTRIM(LEFT(MyDateValues, CHARINDEX('EDT', MyDateValues) - 1)),
            -- 修复秒和毫秒之间的空格问题
            ' :', ':'
        ) AS DATETIME
    ) AS ConvertedDateTime
FROM dbo.stringdates

方案2:兼容NULL值的简化写法

如果要自动处理NULL值,用ISNULL避免CHARINDEX在NULL值上报错:

SELECT 
    MyDateValues,
    TRY_CAST(
        REPLACE(
            NULLIF(
                RTRIM(LEFT(MyDateValues, CHARINDEX('EDT', ISNULL(MyDateValues, '')) - 1)),
                ''
            ),
            ' :', ':'
        ) AS DATETIME
    ) AS ConvertedDateTime
FROM dbo.stringdates

说明:

  1. CHARINDEX('EDT', MyDateValues)定位EDT的起始位置,LEFT截取到该位置前的内容,无需手动处理EDT前后的空格
  2. REPLACE(' :', ':')修复部分行里秒和毫秒之间的多余空格,让时间格式符合HH:mm:ss:fff要求
  3. TRY_CAST确保即使存在未修复的坏数据,查询也能正常执行,对应行返回NULL
  4. SQL Server会自动忽略字符串开头的星期标识(如Tue、Sat),无需额外处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 12:06:06