我有一個SQL查詢,涉及檢索與逗號分隔的搜索字符串匹配的記錄,例如SQL與逗號分隔
例如,鍵控 'WIS' 將返回
WIS82763
和「WIS,太陽將返回
WIS82763 & SUN37483
我用(T.ReceiptNo LIKE '%' + @ReceiptNo + '%')
但顯然它不會用逗號分隔的字符串工作。我嘗試了許多不同的組合和變化,但沒有一個給我想要的結果。請提供建議。
我有一個SQL查詢,涉及檢索與逗號分隔的搜索字符串匹配的記錄,例如SQL與逗號分隔
例如,鍵控 'WIS' 將返回
WIS82763
和「WIS,太陽將返回
WIS82763 & SUN37483
我用(T.ReceiptNo LIKE '%' + @ReceiptNo + '%')
但顯然它不會用逗號分隔的字符串工作。我嘗試了許多不同的組合和變化,但沒有一個給我想要的結果。請提供建議。
假設你使用的SQLServer,並以逗號分隔字符串中每個字有3個字母,你可以做 WHERE 'wis,sun' LIKE '%'+LEFT(T.ReceiptNo,3)+'%'
如果您需要更復雜的邏輯,你可能有過UDF實現它(在這種情況下,更好的性能,這是更好地創建CLR UDF)。
這看起來像一個地方,你會創建動態的SQL。您的字符串中的每個元素都會變成您的where子句中LIKE的新行。它最終會看起來像:
(
T.ReceiptNo LIKE '%WIS%'
OR T.ReceiptNo LIKE '%SUN%'
)
你如何去做這取決於你在哪裏建立你的SQL。您是使用存儲過程還是內聯SQL?
下面的查詢將提供所需的結果,
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)
你用什麼服務器? – a1ex07
它只是逗號分隔的搜索字符串,還是在數據庫中有逗號分隔的值? – NullUserException
@ a1ex07看起來像T-SQL語法。我正在重新標記這個sql服務器。 OP可以自由地更正標籤,如果它是錯誤的。 – NullUserException