SQL Server插入数据时日期/时间字符串转换失败错误原因咨询
错误产生原因
- 核心直接原因是日期字符串的格式和数据库默认的日期解析规则不匹配:你插入语句里写的日期是
DD-MM-YYYY(日-月-年)格式的字符串,绝大多数数据库默认的日期字符串解析格式为YYYY-MM-DD(年-月-日),同时解析规则还会受数据库实例的时区、语言配置影响,当前数据库无法将你输入的24-06-1997这类字符串正确转换为Date类型的字段值,因此抛出该转换失败报错。 - 除此之外你的代码还存在另一个潜在错误:
studentID是主键字段,要求值唯一非空,但你三条INSERT语句传入的studentID都是226745,修复日期问题后还会触发主键冲突报错。
修复方案
- 调整日期字符串为数据库通用的标准
YYYY-MM-DD格式,同时修改主键值保证唯一性,示例修改后的插入语句如下:
INSERT INTO student VALUES('226745','Ahmed','1997-06-24'); INSERT INTO student VALUES('226746','sara','2000-03-28'); INSERT INTO student VALUES('226747','Ali','2007-02-12');
- 如果你需要保留原有
DD-MM-YYYY的日期写法,可以调用对应数据库的日期转换函数显式指定格式完成转换,不同数据库的写法参考:
- SQL Server:
CONVERT(DATE, '24-06-1997', 105) - MySQL:
STR_TO_DATE('24-06-1997', '%d-%m-%Y') - Oracle:
TO_DATE('24-06-1997', 'DD-MM-YYYY') - PostgreSQL:
TO_DATE('24-06-1997', 'DD-MM-YYYY')
内容的提问来源于stack exchange,提问作者Buthaina _
相关产品推荐
相关产品推荐

