将数据类型nvarchar转换为datetime时出错

时间:2012-07-25 14:05:37

标签: sql-server-2005 datetime type-conversion

我有以下程序界面:

Create procedure [dbo].[InsertItemDetails]
    @TimeItemAdded datetime

当我这样称呼它时:

EXEC [dbo].[InsertItemDetails]
     @TimeItemAdded = N'20/07/2012 00:00:00';

我收到此错误:

  

Msg 8114,Level 16,State 5   将数据类型nvarchar转换为datetime时出错。

4 个答案:

答案 0 :(得分:10)

根据您的区域设置,您传递的@TimeItemAdded参数可能无法识别。

您应该将日期传递为:

20120720

答案 1 :(得分:2)

为您的日期使用明确的字符串文字。在这种情况下:

EXEC dbo.InsertItemDetails
    ...
    , @TimeItemAdded = '20120720';

更好的是,确保在您知道日期正确的情况下传递强类型参数。理想情况下,这绝不应该以任何格式呈现为字符串。

像m / d / y这样的区域格式是坏消息,因为根据用户的会话,日期格式,语言设置,机器上的区域设置等,您无法确保它们能够正常工作。

答案 2 :(得分:0)

此链接包含所有日期时间格式及其条目 http://www.sql-server-helper.com/tips/date-formats.aspx

您可以将其作为varchar传递,并使用正确的日期格式代码将其显式转换为日期时间。例如:

SELECT CONVERT(DATETIME, '20/07/2012 00:00:00', 103)

103是您要查找的日期时间代码。

答案 3 :(得分:0)

SQL将您的日期读作7/20/2012无效,您可以使用更安全的格式yyyy-MM-dd传递日期对象,例如:2012-07-20