【问题标题】:ASP SQL Searching for One String in Multiple Columns of One TableASP SQL 在一张表的多列中搜索一个字符串
【发布时间】:2013-07-02 06:35:36
【问题描述】:

我有一个表,我试图在其中运行 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

我希望能够运行一个搜索多个列的查询(例如“迈阿密,佛罗里达州)并返回正确的结果。

搜索输入为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 或 Name=Miami+FL 返回 0 个结果。

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

【问题讨论】:

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


    【解决方案1】:

    在我看来,您正在尝试在不支持全文搜索的后端进行全文搜索。从 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 传递给查询。

    【讨论】:

    • 这个回答有助于澄清一些事情,非常感谢!仍然没有工作,DIM searchTerm, inputSplit searchTerm = Request.querystring("Name") inputSplit = Split(searchTerm, ",")fp_sQry="SELECT * FROM tblShuls WHERE ((Shiur = '2') or (Shiur IS NULL)) AND City + State + Name + Zip + Country LIKE '%::response.write searchTerm::%' or (City = '::City::') or (Country = '::Country::') AND (Nusach LIKE '%::Nusach::%') ORDER BY Name ASC" 我最终得到了我数据库中所有条目的结果,所以它们显然都符合这个非常开放的通配符。
    • 我认为response.write searchTerm 不属于那里。但是,无论如何,您都应该使用参数化查询(请参阅我的答案中的最后一个链接或this question 的答案)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    • 2013-04-17
    • 2021-11-28
    相关资源
    最近更新 更多