2011-11-27 94 views
0

我有一個SQL查詢,涉及檢索與逗號分隔的搜索字符串匹配的記錄,例如SQL與逗號分隔

例如,鍵控 'WIS' 將返回

WIS82763

和「WIS,太陽將返回

WIS82763 & SUN37483

我用(T.ReceiptNo LIKE '%' + @ReceiptNo + '%')但顯然它不會用逗號分隔的字符串工作。我嘗試了許多不同的組合和變化,但沒有一個給我想要的結果。請提供建議。

+0

你用什麼服務器? – a1ex07

+1

它只是逗號分隔的搜索字符串,還是在數據庫中有逗號分隔的值? – NullUserException

+0

@ a1ex07看起來像T-SQL語法。我正在重新標記這個sql服務器。 OP可以自由地更正標籤,如果它是錯誤的。 – NullUserException

回答

0

假設你使用的SQLServer,並以逗號分隔字符串中每個字有3個字母,你可以做 WHERE 'wis,sun' LIKE '%'+LEFT(T.ReceiptNo,3)+'%'如果您需要更復雜的邏輯,你可能有過UDF實現它(在這種情況下,更好的性能,這是更好地創建CLR UDF)。

0

這看起來像一個地方,你會創建動態的SQL。您的字符串中的每個元素都會變成您的where子句中LIKE的新行。它最終會看起來像:

(
    T.ReceiptNo LIKE '%WIS%' 
OR T.ReceiptNo LIKE '%SUN%' 
) 

你如何去做這取決於你在哪裏建立你的SQL。您是使用存儲過程還是內聯SQL?

0

下面的查詢將提供所需的結果,

DECLARE @likeValue VARCHAR(5000), 
    [email protected] 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)