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

向MSSQL表插入datetime时转换失败的问题及相关咨询

问题分析与解决方案

一、转换失败的原因

你使用的CONVERT(datetime, '2023-02-14 01:41:24', 113)语句中,第三个参数113对应的是英式日期格式(dd mon yyyy hh:mm:ss:mmm(24h)),比如正确输入应为'14 Feb 2023 01:41:24'。但你传入的字符串是yyyy-mm-dd hh:mm:ss格式,与113指定的格式不匹配,因此触发了转换错误。

二、能否为datetime列设置固定格式避免转换?

不行。SQL Server中的datetime类型是以二进制形式存储的,本身没有格式,所谓的“格式”只是数据显示时的表现形式。要避免转换错误,更可靠的方式是:

  • 使用SQL Server能自动识别的ISO 8601标准格式,比如'2023-02-14T01:41:24',这种格式不受服务器语言/日期设置影响,无需转换可直接插入:
    insert into dbo.Table(Id, StartTime, StopTime) values('1', '2023-02-14T01:41:24', null)
    
  • 采用参数化查询,让数据库驱动自动处理类型转换,彻底规避字符串格式问题。

三、能否指定服务器默认使用yyyy-mm-dd hh:mm:ss格式?

可以通过修改服务器配置实现:

  1. 会话级临时生效:执行SET DATEFORMAT ymd;,当前会话内的日期字符串会按年-月-日的规则解析。
  2. 服务器级永久生效:修改SQL Server的默认语言为支持ymd格式的语言(比如英语(美国)),或通过数据库配置工具调整全局日期格式。

不过更推荐使用ISO 8601格式,因为它兼容性最强,不会因服务器设置变更引发问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 17:50:33