SQL与逗号分隔

时间:2011-11-27 16:05:30

标签: sql sql-server

我有一个SQL查询,涉及检索与逗号分隔的搜索字符串匹配的记录,

e.g。键入'wis'将返回

WIS82763

和'wis,sun'将返回

WIS82763& SUN37483

我正在使用( T.ReceiptNo LIKE '%' + @ReceiptNo + '%' ),但显然它不能用逗号分隔的字符串。我尝试了许多不同的组合和变化,但没有一个给我想要的结果。请劝告。

3 个答案:

答案 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)