Sql server 从字符串转换日期和/或时间时转换失败

Sql server 从字符串转换日期和/或时间时转换失败,sql-server,stored-procedures,Sql Server,Stored Procedures,我写了一个程序,实际上是搜索记录。 当我执行它时,它会给出一个错误,上面写着: 从字符串转换日期和/或时间时,转换失败 声明: ((CONVERT(varchar, DATEPART(YYYY, Tbl_Contract.ContractDate), 101)) = @Year or @Year = '') 您似乎正在将日期转换为年份值: DATEPART(YYYY,@ContractDate) 然后尝试将其转换回日期: CONVERT(varchar, DATEPART(YYYY, @Co

我写了一个程序,实际上是搜索记录。 当我执行它时,它会给出一个错误,上面写着:

从字符串转换日期和/或时间时,转换失败

声明:

((CONVERT(varchar, DATEPART(YYYY, Tbl_Contract.ContractDate), 101)) = @Year or @Year = '')

您似乎正在将日期转换为年份值:

DATEPART(YYYY,@ContractDate)
然后尝试将其转换回日期:

CONVERT(varchar, DATEPART(YYYY, @ContractDate),101)
您可以尝试以下操作:编辑

datepart(yyyy, CONVERT(datetime, @ContractDate))

由于
ContractDate
是一个
Varchar
,您可以使用

SubString(ContractDate, x, 4) = @YearString 
或者可以封装条件

Case when IsDate(ContractDate) = 1 
      then ((CONVERT(varchar, DATEPART(YYYY, @a), 101))) 
      else NULL 
end

什么是-1?还没有注释..ContractDate是Datetime字段?不,它不是Datetime字段,ContractDate是varchar ContractDate是varchar字段,不是Datetime,确切地说。这将把它从varchar转换为datetime。