我的应用程序中有一个搜索功能,用于搜索特定列的字符串值。搜索文本作为参数传递给过程。现在我必须在另一个列中搜索,该列是另一个表中的整数。输入参数是一个,但现在我必须在两个列中搜索并根据它返回结果。
//查询:
@SearchText VARCHAR(8000) = ''
SELECT DISTINCT Id, TransactionId, wfdFieldValue
where (wfdFieldValue LIKE '%' + @SearchText + '%' OR @SearchText = '')
在上面的查询中,我必须在where条件中包含TransactionId。因此,如果用户使用TransactionId或Fieldvalue进行搜索,则查询将返回结果。
注意: TransactionId是一个整数数据类型。
答案 0 :(得分:3)
SELECT DISTINCT Id, TransactionId, wfdFieldValue
where wfdFieldValue LIKE '%' + @SearchText + '%'
OR @SearchText = ''
OR CAST(TransactionId AS VARCHAR(50)) LIKE '%' + @SearchText + '%'
演员应该解决它,但我会首先考虑可能的设计改进。
答案 1 :(得分:3)
如果我理解正确,您可能希望在任一列中都有匹配,以使该行显示在搜索结果中。在这种情况下,您需要一个简单的OR
;
SELECT DISTINCT Id, TransactionId, wfdFieldValue
FROM bop
WHERE @SearchText='' OR
wfdFieldValue LIKE '%' + @SearchText + '%' OR
TransactionId LIKE '%' + @SearchText + '%'
(您可以立即在整数列上使用LIKE
而无需手动转换。)
值得注意的是,这种带有前导%
的通配符搜索不会以最佳方式使用索引,因此随着表的增长,此查询的性能很可能不会很好。