ASP SQL在一个表的多列中搜索一个字符串

时间:2013-07-02 06:35:37

标签: sql ms-access search asp-classic vbscript

我有一个表,我正在尝试运行SQL查询(经典ASP)。该表的结构如下:

ID  Name    City        State   Zip     Country
1   Name1   Los Angeles CA      90210   USA
2   Miami   New York    NY      10011   USA
3   Name3   Miami       FL      33184   USA

我希望能够运行搜索多个列的查询(例如“Miami,FL”)并返回正确的结果。

搜索以Name=SearchTerm的形式出现,我当前的SQL查询是:

fp_sQry="SELECT * FROM tableName WHERE ((Shiur = '2') or (Shiur IS NULL)) AND ((City LIKE '::Name::%') or (State LIKE '%::Name::') or (Name LIKE '%::Name::%') or (Zip LIKE '%::Name::%') or (Country LIKE '%::Name::%')) AND (Nusach LIKE '%::Nusach::%') ORDER BY Name ASC"

按照目前的情况,我只能搜索单个列,因此Name=Miami实际上会搜索所有列并返回所有正确的结果,而Name=Miami,+ FL或{{1返回0结果。

有关如何调整查询以匹配多个列中查询的多个部分的任何想法?

1 个答案:

答案 0 :(得分:3)

我希望您能够尝试在不支持全文搜索的后端进行全文搜索。从Access切换到SQL Server可能会更好。 IIRC甚至Express版本最近支持full-text search

在Access上,您可以通过修改查询来模拟全文搜索:

SELECT *
FROM tableName
WHERE (Shiur = '2' OR Shiur IS NULL)
  AND City + State + Name + Zip + Country LIKE '%::Name::%'
  AND Nusach LIKE '%::Nusach::%'
ORDER BY Name ASC

请注意,所有连接字段(City + State + Name + Zip + Country)必须具有相同的数据类型。

但是,即使这样,当您想要搜索多个术语时,您仍然需要解析输入字符串并修改查询。对于您的示例输入Miami+FL,您需要拆分该字符串:

inputString = "Miami+FL"
searchTerms = Split(inputString, "+")

将查询修改为以下内容:

SELECT *
FROM tableName
WHERE (Shiur = '2' OR Shiur IS NULL)
  AND City + State + Name + Zip + Country LIKE '%::param1::%'
  AND City + State + Name + Zip + Country LIKE '%::param2::%'
  AND Nusach LIKE '%::Nusach::%'
ORDER BY Name ASC

并将searchTerms(0)searchTerms(1)作为2 parameters传递给查询。