转换失败从字符串转换日期时间

时间:2011-04-21 13:34:06

标签: sql sql-server-2005

我正在尝试将我的三个参数转换为DATETIME,但它无效。每当我运行此查询时,我都会收到从字符串转换datetime时转换失败的错误。也许我在转换中做错了?如果有人可以提供任何反馈。

    @month varchar,
    @day varchar,
    @year varchar

AS
DECLARE @date DATETIME
SET @date = Convert(DateTime, @month + '/' + @day + '/' + @year, 101)

Select *
From events
Where (EDate = @date) OR EDateEnd = @date OR @date Between EDate AND EDateEnd
Order By EDate ASC

3 个答案:

答案 0 :(得分:3)

您需要设置参数的大小。可能类似

@month varchar(2),
@day varchar(2),
@year varchar(4)

答案 1 :(得分:0)

这只是猜测,因为显示的转换函数应该使用适当的参数。

你是否以一个两位数的数字过去?如果是这样,请尝试将其作为完整的四位数年份(“101”格式预期)或将其更改为

SET @date = Convert(DateTime, @month + '/' + @day + '/' + @year, 1) 

如果你过了两位数的年份。

(参见世纪和没有世纪的差异:http://msdn.microsoft.com/en-us/library/ms187928.aspx

修改

我有第二次猜测......错误可能不在您明确将参数转换为Datetime变量的行上。这之前我已经烧了......错误可能发生在以下一行:

Where (EDate = @date) OR EDateEnd = (@date) OR @date Between EDate AND EDateEnd 

如果EDate列或EDateEnd列不是必需的DateTime列。可能是THOSE包含无法转换为DateTime的值。 (它们可以是char字段,其中存储有DateTime字符串,或者它们可以是存储在其中的空值的实际Date字段。)

但是,如果没有关于数据库实际架构的更多信息,很难说清楚。我们能做的最好的就是猜测。

答案 2 :(得分:0)

这应该有效。确保您在参数中提供了有效值。

<强>更新

您应该丢失101转换参数。如果参数通知有效值,则应该适用于2位数和4位数年份:

SET @date = Convert(DateTime, @month + '/' + @day + '/' + @year)