Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 转换从字符串转换日期时间失败_Sql_Sql Server 2005 - Fatal编程技术网

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

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

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

这只是一个猜测,因为显示的转换函数应该使用正确的参数

你是以两位数的数字过年吗?如果是这样,请尝试将其作为完整的四位数年份传递(“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)”之间的区别在哪里?