将char数据类型转换为datetime数据类型会导致日期时间值超出范围

时间:2012-12-14 11:20:36

标签: sql datetime sqldatetime

我有以下查询,给出一个错误:将char数据类型转换为datetime数据类型导致超出范围的datetime值。

  

INSERT INTO ACCount(DocumentNo,AccNo,DueDate,[Description],DC,Amount,Amount1,       Amount2,DateCreated,DateModified,[Type])VALUES(40,6000012,'14 / 12/2012 12:00:00 AM',       N'',N'C',365.70,551292.750000000,365.700000000,'14 / 12/2012 12:00:00 AM','14 / 12/2012       12:00:00 AM',N'PI')

无法确切知道错误到底是什么。

我怎么解决这个问题?

提前致谢。

2 个答案:

答案 0 :(得分:2)

'14 / 12/2012'是大多数服务器上第14个月的第12天。您必须使用正确的格式规范来表示日期,或者更好(但仅限于应用程序代码):仅使用调用代码中日期的自然表示将其作为参数传递(然后永远不会有任何字符串表示,所以它永远不会模棱两可。)

使服务器和人类读者非常明确的另一种方法是:

'14 Dec 2012 12:00:00 AM'

答案 1 :(得分:0)

您使用的是不明确的日期时间格式,区域设置的默认值意味着它不接受它。尝试:

INSERT INTO ACCount (DocumentNo, AccNo, DueDate, [Description], DC, Amount,
       Amount1, Amount2, DateCreated, DateModified, [Type])
VALUES (40, 6000012, '2012-12-14T12:00:00 AM', N'', N'C', 365.70, 551292.750000000, 
        365.700000000, '2012-12-14T12:00:00 AM', '2012-12-14T12:00:00 AM', N'PI')

当然,鉴于时间组件都是午夜,您可能更喜欢使用20121214(这是一种明确的日期格式)