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

如何将YYMMDDhhmm格式的NVARCHAR转换为YYYY-MM-DD hh:mm:ss格式的DATETIME?

问题:将nvarchar类型的2208111603转换为datetime类型的2022-08-11 00:00:00

需要将值2208111603(nvarchar类型)转换为2022-08-11 00:00:00(datetime类型)。尝试过的方法及对应的错误如下:

  • CAST(DATE_TIME AS numeric)可以执行,但CAST(CAST(DATE_TIME AS numeric) AS datetime)返回算术溢出错误。
  • convert(datetime2, CAST(DATE_TIME AS numeric), 105)返回错误:

    不允许从数据类型numeric显式转换为datetime2。

  • CONVERT(datetime2, DATE_TIME , 105)返回错误:

    从字符串转换日期和/或时间时失败。

  • CONVERT(datetime2, CONVERT(CHAR(10), DATE_TIME), 105)返回错误:

    从字符串转换日期和/或时间时失败。

  • PARSE(DATE_TIME AS date USING 'en-US')返回错误:

    使用区域设置'en-US'将字符串值'2208111603'转换为date数据类型时出错。

  • SELECT convert(datetime,'2208111603',112)返回错误(Msg 241):

    从字符串转换日期和/或时间时失败。

解决方案

问题出在字符串格式2208111603为YYMMDDHHMM格式,SQL Server的CONVERT内置格式不直接支持该格式,需先拆分重组为可识别的日期格式:

方法1:字符串拼接重组后转换

提取前6位(YYMMDD),拼接成YYYY-MM-DD格式再转换:

SELECT CONVERT(datetime, '20' + LEFT('2208111603', 2) + '-' + SUBSTRING('2208111603', 3, 2) + '-' + SUBSTRING('2208111603', 5, 2), 23)

若为字段DATE_TIME,替换为字段名即可:

SELECT CONVERT(datetime, '20' + LEFT(DATE_TIME, 2) + '-' + SUBSTRING(DATE_TIME, 3, 2) + '-' + SUBSTRING(DATE_TIME, 5, 2), 23)

方法2:使用STUFF函数简洁重组

利用STUFF插入分隔符,简化拼接逻辑:

SELECT CONVERT(datetime, STUFF(STUFF('20' + LEFT(DATE_TIME, 6), 7, 0, '-'), 5, 0, '-'), 23)

解释:'20' + LEFT(DATE_TIME,6)得到20220811,通过STUFF在第5、7位插入-,转为2022-08-11,最后用格式23(ISO日期格式)转换为datetime。

方法3:保留时间部分的转换

若需保留原字符串中的16:03时间,可重组为完整的YYYY-MM-DD HH:MM:SS格式:

SELECT CONVERT(datetime, 
    '20' + LEFT(DATE_TIME, 2) + '-' + SUBSTRING(DATE_TIME, 3, 2) + '-' + SUBSTRING(DATE_TIME, 5, 2) + ' ' +
    SUBSTRING(DATE_TIME, 7, 2) + ':' + SUBSTRING(DATE_TIME, 9, 2) + ':00',
    120)

内容的提问来源于stack exchange,提问作者K H A N

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 06:40:27