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

SQL中varchar字符串转换为datetime无法获取时间部分如何解决

问题根因

代码无法获取时间部分的核心原因是CAST(@col AS varchar(8))会将14位长度的输入字符串截断为前8位,仅保留20220602的日期片段,后6位代表时分秒的235900被直接丢弃,因此转换后时间部分默认显示为00:00:00.000。

修复方案

输入字符串是紧凑格式的yyyyMMddHHmmss(4位年+2位月+2位日+2位时+2位分+2位秒),不需要做截断处理,将字符串整理为数据库可识别的日期时间格式后再转换即可,以下提供两种常用写法:

  • 全版本兼容写法:通过STUFF函数插入时间分隔符,再用121样式转换
declare @col varchar(14) = '20220602235900';
select CONVERT(datetime, 
    STUFF(STUFF(STUFF(@col,9,0,' '),12,0,':'),15,0,':'),
    121
) dtimecre

运行后返回结果为2022-06-02 23:59:00.000,包含完整的日期与时间信息。

  • SQL Server 2012及以上版本可用写法:通过DATETIMEFROMPARTS函数按位截取时间各部分生成日期类型,逻辑更直观
declare @col varchar(14) = '20220602235900';
select DATETIMEFROMPARTS(
    SUBSTRING(@col,1,4),  -- 年
    SUBSTRING(@col,5,2),  -- 月
    SUBSTRING(@col,7,2),  -- 日
    SUBSTRING(@col,9,2),  -- 时
    SUBSTRING(@col,11,2), -- 分
    SUBSTRING(@col,13,2), -- 秒
    0                     -- 毫秒
) dtimecre

不要随意对原始日期字符串做定长截断,除非你明确确认截断位置不会丢失需要的时间片段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 11:36:21