Sql 转换从字符串转换日期时间失败
我正在尝试将我的三个参数转换为DATETIME,但它不起作用。每当我运行此查询时,从字符串转换datetime时,我得到一个错误,即转换失败。也许我在做错误的转换?如果有人能提供任何反馈Sql 转换从字符串转换日期时间失败,sql,sql-server-2005,Sql,Sql Server 2005,我正在尝试将我的三个参数转换为DATETIME,但它不起作用。每当我运行此查询时,从字符串转换datetime时,我得到一个错误,即转换失败。也许我在做错误的转换?如果有人能提供任何反馈 @month varchar, @day varchar, @year varchar AS DECLARE @date DATETIME SET @date = Convert(DateTime, @month + '/' + @day + '/' + @year, 101) Se
@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
这只是一个猜测,因为显示的转换函数应该使用正确的参数 你是以两位数的数字过年吗?如果是这样,请尝试将其作为完整的四位数年份传递(“101”格式希望如此),或将其更改为
SET @date = Convert(DateTime, @month + '/' + @day + '/' + @year, 1)
如果你通过一个2位数的年份
(请参见此处有世纪与无世纪的区别:)
编辑
我有第二个猜测。。。错误可能不在将参数显式转换为Datetime变量的行上。这以前让我很难受。。。错误可能发生在以下行:
Where (EDate = @date) OR EDateEnd = (@date) OR @date Between EDate AND EDateEnd
如果EDate列或EDateEnd列不一定是DateTime列。可能是那些包含无法转换为DateTime的值。(它们可以是存储有日期时间字符串的字符字段,也可以是存储有空值的实际日期字段。)
但是,如果没有关于数据库实际模式的更多信息,就很难判断。我们所能做的就是猜测。这应该是可行的。确保在参数中提供了有效值 更新 转换时应丢失
101
参数。如果参数被告知有效值,则这应适用于两位数和四位数年份:
SET @date = Convert(DateTime, @month + '/' + @day + '/' + @year)
您需要设置参数的大小。大概是
@month varchar(2),
@day varchar(2),
@year varchar(4)
您为每个参数传递了什么?您的Where表达式确实让我有点困惑。“‘EDate=@date’”和“EDateEnd=(@date)”之间的区别在哪里?