我正在嘗試創建答案
SELECT *
FROM table
WHERE column LIKE 'Text%'
OR column LIKE 'Hello%'
OR column LIKE 'That%'
在下面的鏈接中:
結合 SQL Server 的“LIKE”和“IN”
問題是,在我的示例中,答案“Text”、“Hello”和“That”中的值不是硬編碼的,它們是從應用程式多選控制元件中填充的,可以是NULL值或逗號分隔的字串,像這樣:
DECLARE @String_With_Commas nvarchar(255);
SET @String_With_Commas = N'Mercedes,BMW,Audi,Tesla,Land Rover';
我試過下面的代碼,但沒有用:
DECLARE @SearchString = CONCAT('''',REPLACE(@String_With_Commas, N',', N'%'' OR column LIKE '''));
并像這樣使用它:
WHERE column LIKE @SearchString '%' ''''
uj5u.com熱心網友回復:
假設您使用的是完全受支持的 SQL Server 版本,有幾個想法:
JOIN至STRING_SPLIT:
SELECT *
FROM dbo.YourTable YT
JOIN STRING_SPLIT(@YourVariable,',') SS ON YT.YourColumn LIKE SS.[value] '%';
但是,如果可以有多個匹配項,這將回傳多行。
使用EXISTS:
SELECT *
FROM dbo.YourTable YT
WHERE EXISTS (SELECT 1
FROM STRING_SPLIT(@YourVariable,',') SS
WHERE YT.YourColumn LIKE SS.[value] '%');
如果有多個匹配項,這不會兩次回傳同一行。
從對此答案的評論NULL中,問題中省略了引數能夠的要求。因此,我建議您使用以下EXISTS解決方案:
SELECT *
FROM dbo.YourTable YT
WHERE EXISTS (SELECT 1
FROM STRING_SPLIT(@YourVariable,',') SS
WHERE YT.YourColumn LIKE SS.[value] '%')
OR @YourVariable IS NULL
OPTION (RECOMPILE);
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/418525.html
標籤:
上一篇:如果多個存在,則sql選擇具有最大值的行,如果不選擇可用行
下一篇:使用類似正則運算式的功能過濾表
