我有一个动态过程,其中输入变量可以是一个日期,相应的列被格式化为datetime,或者一个字符串,相应的列被格式化为nvarchar。
如果输入是日期,那么这看起来像yyyy-mm-dd。
为了解决这个问题我尝试将以下内容添加到我的Where子句中,但这会产生以下错误(如果我删除此行,则其余的过程按预期工作):
@searchTerm nvarchar(256) = ''
-- ...
WHERE CASE WHEN ''' + @searchCategory + ''' <> ''dateX'' THEN
(A.' + @searchCategory + ' LIKE ''%' + @searchTerm + '%'')
ELSE
(A.dateX = ''' + CAST(@searchTerm AS DATETIME) + ''')
END
-- ...
错误:
Conversion failed when converting date and/or time from character string.
有人可以告诉我我必须在这里做些什么来改变它吗?
非常感谢,迈克。
答案 0 :(得分:1)
您无法将日期时间值放入字符串中。首先将其转换为datetime,然后将其转换为您想要的格式,然后转换为Varchar,以便它可以成为动态字符串的一部分。
(A.dateX = ''' + CAST(CAST(@searchTerm AS DATETIME) AS VARCHAR(20)) + ''')
或者如果@searchTerm已经采用您想要的格式,那么您就不需要将其投射
(A.dateX = @searchTerm)