【问题标题】:Can't make a partial match from TextBox in a query无法在查询中从 TextBox 进行部分匹配
【发布时间】:2012-11-15 01:16:36
【问题描述】:

我有一列包含像“Tom Hardy”这样的数据,我添加了一个新查询以在该列中进行搜索,如下所示:

SELECT  Number, Name, Business, [Tax File No], Phone
FROM            Archive
WHERE        (Name = @Name)

当我输入像“Tom Hardy”这样的全名时它可以工作,但我想通过搜索“Tom”或“Hardy”来查找结果。

我也试过了:

SELECT  Number, Name, Business, [Tax File No], Phone
FROM            Archive
WHERE        (Name IN (@Name))

都不行。

使用 Visual Studio 2010 并连接到 C# 和 SQL 数据库。

请帮忙,谢谢!

【问题讨论】:

    标签: sql ado.net


    【解决方案1】:

    您需要在参数中添加通配符

    WHERE Name LIKE '%' + @Name + '%'
    

    所以

    SELECT  Number, Name, Business, [Tax File No], Phone
    FROM            Ahrcive
    WHERE        (Name COLLATE UTF8_GENERAL_CI like '%' + @Name + '%')
    

    I don't think you can do this using the 'in' keyword.

    【讨论】:

    • 感谢您的关心,但没有奏效。仍然无法搜索非全名
    • @MohammedAhmed 再次更新以替代 Jorge 小写建议(尽管它可能过于本地化,无法满足您的需求)。如果需要,您也可以将其添加到数据库中stackoverflow.com/questions/2876789/…
    • 优雅 +1 :) .. 我不知道为什么 Mohammed 总是遇到问题
    • 谢谢。 @MohammedAhmed 您是否收到任何错误,或者只有 0 个结果?您可以在 Sql Server Management Studio 中而不是在代码中尝试上面的代码,以便我们排除这种可能性。
    • @Dave 在尝试使用上次更新时给了我错误“Invalid Collat​​ion UTF8_GENERAL_CI”
    【解决方案2】:

    Dave 是对的,除了 mybe 你还想检查小写/大写 escenarios, 也许这就是你没有收到好的结果的原因

    喜欢:

    SELECT  Number, Name, Business, [Tax File No], Phone
    FROM            Archive
    WHERE        (LOWER(Name) like '%' + LOWER(@Name) + '%')
    

    此语句将两个值都转换为小写,并且比较再次有效

    【讨论】:

    • @MohammedAhmed - 请您在 SSMS (SQL Server Management Studio) 中尝试一下,以便我们排除任何 C#/连接/编码问题。
    猜你喜欢
    • 2018-02-18
    • 2016-09-24
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    • 2017-03-02
    • 2019-10-20
    相关资源
    最近更新 更多