【发布时间】:2012-05-05 05:17:56
【问题描述】:
这是我试图以最简单的形式实现的目标:
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%')
我正在尝试在 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)
但这不会返回我想要的 - 它会返回名称或 SKU 与任一搜索词匹配的任何记录。我需要它像第一个查询一样返回,其中名称或 SKU 匹配所有搜索词(我认为这是有道理的)。
非常感谢您朝着正确的方向前进 - 如果您需要我更具体一些,请告诉我。
注意:目前全文搜索不是一个可行的选择。
谢谢!
【问题讨论】:
-
如果您需要“匹配所有搜索词”,这是否意味着您只能有两 (2) 个搜索词,因为您只有两列要匹配?
-
搜索词的数量可以是无限的。例如,我可以搜索“白色塑料杯”。因此,对于每个术语,ProductName 或 SKU 必须匹配。希望这是有道理的。
-
这没有意义。怎么可能只有两列匹配三个不同搜索词的全部?不可能像你描述的那样。
-
@seanxe,忽略他,这很有意义。
-
@RBarryYoung,不是
=,是like '%...%',意思是“包含”。他基本上是在具有多个关键字的 2 个字段中进行正常的文本搜索。如果您想要在两个字段(页面标题和页面内容)中搜索多个单词的示例,请查看 Google。
标签: sql-server tsql user-defined-functions sql-like