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

SQL Server datetime插入报错:nvarchar转datetime超出范围求助

解决SQL Server datetime插入转换错误的方案

问题原因

错误源于SQL Server默认日期格式无法识别'06/17/2023, 02:41:38'这类格式(比如服务器区域设置为DD/MM/YYYY时,会将17判定为月份导致超出范围)。以下是几种可靠解决办法:

方法1:传入Python datetime对象(推荐)

把字符串转换成Python的datetime对象,让数据库驱动自动处理类型转换,彻底避免格式兼容问题:

from datetime import datetime

# 将原始字符串转为datetime对象
join_date = datetime.strptime('06/17/2023, 02:41:38', '%m/%d/%Y, %H:%M:%S')

my_sql = """
insert into @my_table
(
    ename
    , eid
    , eloc
    , ejoindate
)
values (%s,%s,%s,%s)
"""

cursor.execute(my_sql, ('ram', 'ABC001', 'India', join_date))

方法2:使用SQL Server兼容的标准日期字符串

直接传入SQL Server默认可识别的ISO格式字符串,比如'YYYY-MM-DD HH:MM:SS'或'YYYY-MM-DDTHH:MM:SS':

my_sql = """
insert into @my_table
(
    ename
    , eid
    , eloc
    , ejoindate
)
values (%s,%s,%s,%s)
"""

# 转换为标准格式字符串
standard_date = '2023-06-17 02:41:38'
cursor.execute(my_sql, ('ram', 'ABC001', 'India', standard_date))

方法3:在SQL语句中显式指定转换格式

使用SQL Server的CONVERT函数,指定输入字符串的格式代码(101对应MM/DD/YYYY格式):

my_sql = """
insert into @my_table
(
    ename
    , eid
    , eloc
    , ejoindate
)
values (%s,%s,%s, CONVERT(datetime, %s, 101))
"""

cursor.execute(my_sql, ('ram', 'ABC001', 'India', '06/17/2023, 02:41:38'))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 01:52:18