TSQL中的多个LIKE语句

roy*_*e41 7 t-sql sql-server user-defined-functions sql-like

这是我想用它最简单的形式实现的:

SELECT 
    p.ProductId,
    p.ProductName,
    p.SKU
FROM tbl_Product p
WHERE (p.ProductName LIKE '%white%' OR p.SKU LIKE '%white%')
AND (p.ProductName LIKE '%cup%' OR p.SKU LIKE '%cup%')
Run Code Online (Sandbox Code Playgroud)

我试图在UDF中执行此操作,UDF接受所有搜索项的逗号分隔参数.

我尝试将该参数拆分为临时表并尝试连接,如下所示:

DECLARE @SearchText nvarchar(1000) SELECT @SearchText='white,cup'

DECLARE @SearchTerms TABLE (String nvarchar(200))
INSERT INTO @SearchTerms (String)
SELECT '%' + String + '%' FROM dbo.CsvSplitString(@SearchText)

SELECT 
    p.ProductId,
    p.ProductName,
    p.SKU
FROM tbl_Product p
JOIN @SearchTerms s ON (p.ProductName LIKE s.String OR p.SKU LIKE s.String)
Run Code Online (Sandbox Code Playgroud)

但这并没有返回我想要的内容 - 它会返回名称或SKU与任一搜索项匹配的任何记录.我需要它像第一个查询一样返回,其中Name或SKU匹配所有搜索项(我认为这是有道理的).

会非常欣赏正确方向的推动 - 让我知道你是否需要我更具体.

注意:目前全文搜索不是一个可行的选择.

谢谢!

小智 4

下面的查询应该可以做到这一点,但它可能不是最快的!

DECLARE @SearchText nvarchar(1000) SELECT @SearchText='white,cup'
DECLARE @keywords TABLE (keyword nvarchar(255))
DECLARE @keywordCount int

INSERT INTO @keywords (keyword) SELECT * FROM dbo.CsvSplitString(@SearchText)
SET @keywordCount = (SELECT COUNT(*) FROM @keywords)


SELECT *
FROM tbl_Product p
WHERE EXISTS
    (SELECT *
    FROM
        (SELECT productId
        FROM tbl_Product, @keywords
        WHERE productname like '%' + keyword + '%' or sku like '%' + keyword + '%' 
        GROUP BY productid
        HAVING COUNT(*) = @keywordCount
        ) matches 
    WHERE p.ProductId=matches.ProductId
    )
Run Code Online (Sandbox Code Playgroud)