【问题标题】:Compare words and get exact match比较单词并获得完全匹配
【发布时间】:2011-01-10 22:47:20
【问题描述】:

现在这很棘手......我希望我能解释清楚......

我有一张表,里面有名字,我需要将它与我提供的单词进行比较,并得到完全匹配的结果..

现在我说这很棘手,因为我尝试了这个查询,它给了我一组名字。它包含完全匹配的单词以及相似的单词...

这就是我所做的:

DataTable dt = new DataTable();
        SqlConnection connection = new SqlConnection();
        connection.ConnectionString = ConfigurationManager.ConnectionStrings["xyz "].ConnectionString;
        connection.Open();
        SqlCommand sqlCmd = new SqlCommand("SELECT Names FROM Machines WHERE Name  Like '%' + @userName + '%'", connection);
        SqlDataAdapter sqlDa = new SqlDataAdapter(sqlCmd);

        sqlCmd.Parameters.AddWithValue("@userName", userName);

        sqlDa.Fill(dt);
        connection.Close();

现在我想要的是……例如。

如果数据库有三个单词

abc123

xyz123

pqc1238

现在如果单词是 123 它应该 返回 abc123 和 xyz123 如果 c123 则返回 abc123 而不是 pqc1238 和 xyz123

如果是 238 则返回 pqc1238....

我希望我足够清楚......相信我,我第一次也没明白

任何建议都最好找到单词之间的精确匹配。因为 LIKE 是不够的。..

谢谢

【问题讨论】:

  • 这很好...收到这么多回复,我想没有人会理解...谢谢大家
  • 所有答案都是正确的,但我把正确的答案给了第一个回答它的人......对不起,我不能把它给所有人......

标签: c# asp.net sql search


【解决方案1】:

您几乎正确,但您不理解 % 通配符。

在 SQL 中,% 通配符将匹配任何长度的任何字符串。你一开始就想要那个,因为你不关心主要部分。

但是,当您将其放在 LIKE 匹配字符串的末尾时,如果您的字符串后面有任何内容,它将允许匹配。

那么,以你为例

abc123

xyz123

pqc1238

现在如果单词是 123 它应该返回 abc123 和 xyz123 如果 c123 然后返回 abc123 和 >NOT pqc1238 和 xyz123

如果是 238 则返回 pqc1238....

你有 %123% 你说“我想要所有以任何开头的字符串,然后是 '123',然后以任何结尾。”这将匹配任何包含“123”的字符串。

你想说的是“我想要所有以任何开头的字符串,然后是'123',然后结束。”所以,就是 %123。

最后,要获得与 like 的精确匹配,只需去掉所有通配符。

This page 对 SQL 通配符有很好的概述。

【讨论】:

    【解决方案2】:

    我不会将此称为完全匹配,但如果您正在寻找以给定单词结尾的单词,请尝试:

    "SELECT Names FROM Machines WHERE Name  Like '%' + @userName"
    

    没有第二个 %

    【讨论】:

      【解决方案3】:

      在我看来,您正在搜索以 @userName 结尾的字符串。

      SqlCommand sqlCmd = new SqlCommand("SELECT Names FROM Machines WHERE Name  Like '%' + @userName", connection);
      

      【讨论】:

        【解决方案4】:

        据我了解,您似乎只想要以搜索模式结尾的字符串,所以您所要做的就是从您的选择中省略最后一个“%”。

        SqlCommand sqlCmd = new SqlCommand("SELECT Names FROM Machines WHERE Name  Like '%" + @userName + "'", connection);
        

        【讨论】:

        • 您提供的答案是正确的,但用户名后没有+“'”...我想通了..
        【解决方案5】:

        它读起来好像你想要一个形式的命令select Names from Machines where Names like '%xxx',其中“xxx”是你的词

        如果是这样,@userName 是你的话,那么你想要类似

        SqlCommand sqlCmd = new SqlCommand("SELECT Names FROM Machines WHERE Name  Like '%' + @userName", connection);
        

        【讨论】:

          【解决方案6】:

          在我看来,您想要所有以特定单词结尾的记录。在这种情况下,您只需删除添加到查询中的最后一个“%”。

          SqlCommand sqlCmd = new SqlCommand("SELECT Names FROM Machines WHERE Name  Like '%' + @userName", connection);
          

          希望这就是你所需要的

          【讨论】:

            【解决方案7】:

            您为什么不尝试使用 LINQ?做类似的事情;

            var query = from c in db.Machines where c.Name.EndsWith("123") select c.Names;
            

            我希望这会有所帮助。

            【讨论】:

            • 我必须开始使用 LINQ.. 我不擅长它.. 你能推荐我任何开始阅读 LINQ 的好地方或任何好的教程...谢谢
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-10-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多