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)
| 归档时间: |
|
| 查看次数: |
6595 次 |
| 最近记录: |