1

我有以下查询,给出了一个错误,即将 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')

无法知道究竟是什么错误。

我该如何解决这个问题?

提前致谢。

4

2 回答 2

2

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

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

'14 Dec 2012 12:00:00 AM'
于 2012-12-14T11:24:57.460 回答
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(这是一种明确的仅限日期格式)

于 2012-12-14T11:25:34.483 回答