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

SQL Server中含三位以上小数的字符串转datetime失败,求设置类解决方案

问题解答

核心结论

没有系统级设置能让SQL Server的datetime类型直接接受秒部分超过3位小数的时间字符串,这是datetime类型本身的精度限制导致的——datetime仅支持3位毫秒精度(约0.00333秒的粒度),无法识别更多小数位的时间格式。

可行替代方案

不需要临时表的情况下,有两种便捷的解决方式:

1. 插入时自动截断/转换多余小数位

利用SQL Server的类型转换逻辑,先将高精度时间字符串转为支持更多小数位的类型(如datetime2),再隐式或显式转为datetime,系统会自动截断多余的小数位:

DECLARE @sample TABLE
(
    [Id] [UNIQUEIDENTIFIER] NOT NULL,
    [AccountId] [UNIQUEIDENTIFIER] NOT NULL,
    [CreatedById] [UNIQUEIDENTIFIER] NOT NULL,
    [CreatedAt] [DATETIME] NOT NULL,
    [StartTime] [DATETIME] NULL,
    [EndTime] [DATETIME] NULL,
    [ProcessorTimeUsed] [INT] NOT NULL,
    [FileName] [NVARCHAR](255) NOT NULL,
    [PlanProgress] [NVARCHAR](MAX) NOT NULL,
    [Succeeded] [BIT] NULL
);

INSERT INTO @sample
(
    Id,
    AccountId,
    CreatedById,
    CreatedAt,
    StartTime,
    EndTime,
    ProcessorTimeUsed,
    FileName,
    PlanProgress,
    Succeeded
)
VALUES
(
 '269912c1-9197-4602-9914-7dd273f183b8', 
 '8ee8eead-61fb-4962-b411-887f97157904',
 '17f0e8ef-19c0-450b-ac5d-b1f10156ad6e', 
 CAST('2025-03-11 12:07:32.897475' AS DATETIME), 
 CAST('2025-03-11 12:07:32.907540' AS DATETIME),
 CAST('2025-03-11 12:18:05.006104' AS DATETIME), 102, 
 '0083cce1-f30d-4ab7-9a68-8409ccc0f372.db', '', 1);

也可以显式指定先转datetime2再转datetime,逻辑更清晰:

CAST(CAST('2025-03-11 12:07:32.897475' AS DATETIME2(6)) AS DATETIME)

2. 修改字段类型为datetime2

如果业务允许,直接将表中的CreatedAt、StartTime、EndTime字段类型改为datetime2(6)(支持最高6位小数精度),这样插入带6位小数的时间字符串时无需任何转换,直接兼容:

ALTER TABLE YourTableName
ALTER COLUMN CreatedAt DATETIME2(6) NOT NULL;
ALTER TABLE YourTableName
ALTER COLUMN StartTime DATETIME2(6) NULL;
ALTER TABLE YourTableName
ALTER COLUMN EndTime DATETIME2(6) NULL;

补充说明

datetime类型的精度是SQL Server的底层类型定义,不存在任何系统配置项可以扩展其小数位支持,因此必须通过上述转换或字段类型变更的方式解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 12:30:53