我正在尝试将我的三个参数转换为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
答案 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)