2016-12-01 91 views
0

我有一个奇怪的错误与我的SQL查询。将varchar数据类型转换为日期时间。超出范围的错误

这工作:

INSERT INTO tbl_SomeTable(Send_Type,Remote_Eml,Cover_Subj,Cover_Note,AtnId,StandortEinsatzValue,Standort,KundenNr,AtnTel,Name,Strasse,AtnName,AreaManagerContact,Datum,PLZOrt) 
VALUES ('2', '', '', '','02832','1','Replaced','2001158207','Replaced','Real','Replaced','Replaced','Replaced','10.12.2016','15745 Replaced') 

这给了我一个错误:

INSERT INTO tbl_SomeTable(Send_Type,Remote_Eml,Cover_Subj,Cover_Note,AtnId,StandortEinsatzValue,Standort,KundenNr,AtnTel,Name,Strasse,AtnName,AreaManagerContact,Datum,PLZOrt) 
VALUES ('2', '', '', '','02832','1','Replaced','2001158207','Replaced','Real','Replaced','Replaced','Replaced','17.12.2016','15745 Replaced') 

The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

唯一的区别是日期。 “10.12.2016”vs“17.12.2016”。 “Datum”列是“datetime”类型。

我们使用SQL Server 2016

你能帮助我吗?

+1

'17'超出了月份值的范围,并且您的引擎可能将日期解析为en-US。不要使用像“10.12.2016”这样的文化依赖字符串来插入数据。唯一被认可的独立字符串格式是“20161210”(ISO没有分隔符)。更好的是,使用实际键入的'DATETIME'参数。 –

+1

SELECT CONVERT(VARCHAR,Datum,101)FROM表 – Chanukya

+0

这些注释都应该有效。使用文字“20161212”,或者使用带有适当格式掩码号的“CONVERT”。 –

回答

0

您需要使用CONVERT这一点。如下所示替换您的查询。

还在DB中维护标准化的日期格式。

INSERT INTO tbl_SomeTable(Send_Type,Remote_Eml,Cover_Subj,Cover_Note,AtnId,StandortEinsatzValue,Standort,KundenNr,AtnTel,Name,Strasse,AtnName,AreaManagerContact,Datum,PLZOrt) 
VALUES ('2', '', '', '','02832','1','Replaced','2001158207','Replaced','Real','Replaced','Replaced','Replaced',CONVERT(DATETIME,'10.12.2016',103),'15745 Replaced') 

INSERT INTO tbl_SomeTable(Send_Type,Remote_Eml,Cover_Subj,Cover_Note,AtnId,StandortEinsatzValue,Standort,KundenNr,AtnTel,Name,Strasse,AtnName,AreaManagerContact,Datum,PLZOrt) 
VALUES ('2', '', '', '','02832','1','Replaced','2001158207','Replaced','Real','Replaced','Replaced','Replaced',CONVERT(DATETIME,'17.12.2016',103),'15745 Replaced') 
0

试试这个:

SELECT CONVERT(DATETIME,'17.12.2016',103) 
SELECT CONVERT(DATETIME,'10.12.2016',103) 
相关问题