Sql server 由于值超出范围,无法插入DATETIME字段-已处理100条其他记录

Sql server 由于值超出范围,无法插入DATETIME字段-已处理100条其他记录,sql-server,tsql,Sql Server,Tsql,我在下面粘贴的查询失败,原因如下: 味精242,第16级,第3状态,第1行 将varchar数据类型转换为datetime数据类型导致值超出范围 它已经成功地插入了100条其他记录,为什么它与这个特定记录一起出错 INSERT INTO [My].dbo.Table ([branch], [policyref], [receipt_email_received]) VALUES ('02', 'SCJY05PC01', '13/10/2015 13:46:00') Cheers错误是由于使用了

我在下面粘贴的查询失败,原因如下:

味精242,第16级,第3状态,第1行 将varchar数据类型转换为datetime数据类型导致值超出范围

它已经成功地插入了100条其他记录,为什么它与这个特定记录一起出错

INSERT INTO [My].dbo.Table ([branch], [policyref], [receipt_email_received])
VALUES ('02', 'SCJY05PC01', '13/10/2015 13:46:00')

Cheers

错误是由于使用了当前语言不支持的日期格式,假设13表示日期而不是月份。当前日期格式显然是mm/dd/yyyy,但您输入的日期格式是dd/mm/yyyy

设置语言为英语; 选择CONVERTDATETIME,“13/10/2015 13:46:00”; 去 -结果将varchar数据类型转换为datetime数据类型 -在超出范围的值中。 西班牙语; 选择CONVERTDATETIME,“13/10/2015 13:46:00”; 去 - 2015-10-13 13:46:00.000 设置语言为英语; 还应提及的是,当前语言和日期格式可能是正确的,但在这一情况下,月和日的数字被切换。这可能是偶然的,或者如果数据来自不同的来源,并且该来源使用dd/mm/yyyy格式

另一个选项是在转换时告诉SQL Server日期字符串的格式,而不考虑当前语言(即区域性设置):

设置语言为英语; 选择CONVERTDATETIME,'13/10/2015 13:46:00',103; - 2015-10-13 13:46:00.000 但同样,如果您从表中选择其他日期时,您输入的其他日期返回正确,则可能只有这一特定值处于禁用状态


更多关于样式编号的信息,即此处的103:

干杯,但为什么它对循环中的100条其他记录效果很好,但在这条特定记录上失败了?@Lynchie-这100条其他记录的日期是否都属于本月的第12条或更早?事实上,你现在有很多数据插入到了日期和月份的交换位置吗?@Damien_不信者说对了,它们都是本月的12号或更早。“我的日期时间”都是预期的格式。@Lynchie-问题是,格式为pp/pp/yyyy的任何字符串,其中pp和pp都是介于1和12之间的值,都可以解释为dd/mm/yyyy或mm/dd/yyyy。这是一种模棱两可的日期格式。你以为这是一种解释。原来它是以另一种方式解释的。@Lynchie,这似乎不可能。你有没有办法验证这些日期是否正确?在这一案例中,10和13会被交换吗?