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
相关产品推荐
相关产品推荐

