我有一个SQL查询,涉及检索与逗号分隔的搜索字符串匹配的记录,
e.g。键入'wis'将返回
WIS82763
和'wis,sun'将返回
WIS82763& SUN37483
我正在使用( T.ReceiptNo LIKE '%' + @ReceiptNo + '%' )
,但显然它不能用逗号分隔的字符串。我尝试了许多不同的组合和变化,但没有一个给我想要的结果。请劝告。
答案 0 :(得分:0)
假设您使用SQLServer,并且逗号分隔的字符串中的每个单词都有3个字母,您可以这样做
WHERE 'wis,sun' LIKE '%'+LEFT(T.ReceiptNo,3)+'%'
如果您需要更复杂的逻辑,您可能必须通过UDF实现它(为了在这种情况下获得更好的性能,最好创建CLR UDF)。
答案 1 :(得分:0)
这似乎是一个你可以创建动态sql的地方。字符串中的每个元素都会在where子句中变成一个新的LIKE行。它最终会像:
(
T.ReceiptNo LIKE '%WIS%'
OR T.ReceiptNo LIKE '%SUN%'
)
如何依赖于构建SQL的位置来执行此操作。您使用的是存储过程还是内联SQL?
答案 2 :(得分:0)
以下查询将提供所需的结果
DECLARE @likeValue VARCHAR(5000),
--@ReceiptNo VARCHAR(500),
@selectSql VARCHAR(500),
@sql VARCHAR(5000)
--SET @ReceiptNo ='wis,sun'
-- Put Select SQL
SET @selectSql = 'SELECT * FROM TableName AS T '
-- Splitting the string as required
SET @likeValue = REPLACE(@ReceiptNo, ',', '%'' OR T.ReceiptNo LIKE ''%')
-- Making a single query by concatenating all
SET @sql = @selectSql + ' WHERE T.ReceiptNo LIKE ''%'+ @likeValue + '%'''
--Finally executing the sql query
EXEC(@sql)