我希望基于固定的已知引用(Int)和通配符(varchar)在不同列上进行组合搜索。
我的整数搜索工作正常,但通过varchar(LIKE),搜索失败,并出现从varchar到int转换的错误。
WHERE
MyID = 1 AND MyRef = @Search OR
MyID = 1 AND MyName LIKE N'%' + @Search + N'%'
我假设失败是当SQL针对int(MyRef)搜索varchar时
我哪里出错了? 预先感谢
答案 0 :(得分:1)
每当您比较,移动或将数字连接到字符串时,SQL Server都会尝试implicitly convert strings to numbers。 为了避免这种情况,您必须将数字明确转换为字符串:
WHERE MyId = 1
AND
(
MyRef = @Search
OR MyName LIKE N'%' + CAST(@Search as varchar(11)) + N'%'
)
我正在使用varchar(11)
,因为它足够大,可以容纳int
的最小值,包括负号。如果数字的类型不同,则可能要选择其他大小。
我也对您的条件进行了一些重新排列-多次具有相同的条件是没有意义的,而且,在同一位置组合and
和or
时,最好使用括号where
子句。
答案 1 :(得分:1)
一种简单的方法是使用{=SUMIF(A2:A7,TEXTJOIN(",",TRUE,IF(D2:D7=G2,E2:E7,"")),B2:B7)}
:
concat()
但是,对此似乎有些不满意。您是否真的希望两个字段都使用相同的搜索词?
答案 2 :(得分:1)
这会返回预期的结果吗?
where MyId = 1 and
case isnumeric(@search) when 1 then
case when myRef = @search then 1 else 0 end
else
case when MyName like N'%' + @search + N'%' then 1 else 0 end
end = 1
或
where MyId = 1 and
case try_cast(@search as int) when is not null then
case when myRef = @search then 1 else 0 end
else
case when MyName like N'%' + @search + N'%' then 1 else 0 end
end = 1
答案 3 :(得分:0)
谢谢大家。 我决定不将所有搜索参数合并为一个,而是将参考搜索和文本搜索分开。