我有一个表,我正在尝试运行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结果。
有关如何调整查询以匹配多个列中查询的多个部分的任何想法?
答案 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传递给查询。