比较单词并获得完全匹配

时间:2010-01-29 17:27:19

标签: c# asp.net sql search

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

我有一个在其中命名的表格,我需要将它与我提供的单词进行比较并获得完全匹配...

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

这就是我所做的:

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是不够的..

由于

7 个答案:

答案 0 :(得分:2)

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

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

没有第二个%

答案 1 :(得分:2)

你几乎没有,但你不理解%通配符。

在SQL中,%通配符将匹配任何长度的任何字符串。你最初想要的是因为你不关心领导部分。

然而,当你把它放在LIKE匹配字符串的末尾时,如果你的字符串后面有任何内容,它将允许匹配。

所以,举个例子

  

ABC123

     

XYZ123

     

pqc1238

     

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

     

如果238然后只返回pqc1238 ....

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

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

最后,要获得与之类似的精确匹配,只需留下任何通配符。

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

答案 2 :(得分:1)

根据我的理解,您似乎只希望字符串以搜索模式结尾,因此您只需省略选择中的最后一个“%”。

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

答案 3 :(得分:1)

对我来说,看起来你正在搜索以@userName结尾的字符串。

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

答案 4 :(得分:1)

它读起来好像你想要一个形式的命令从机器中选择名称,如'%xxx',其中“xxx”是你的单词

如果是这种情况,并且@userName是你的话,那么你需要像

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

答案 5 :(得分:1)

为什么不尝试使用LINQ?做点什么;

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

我希望这会有所帮助。

答案 6 :(得分:1)

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

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

希望这就是你需要的东西