Сравните слова и получите точное соответствие - PullRequest
4 голосов
/ 29 января 2010

Теперь это сложно ... Я надеюсь, что смогу объяснить это хорошо ...

У меня есть таблица с именами, и мне нужно сравнить ее со словом, которое я предоставляю, и получить точное совпадение ..

Теперь я говорю, что это сложно, потому что я попробовал этот запрос, и он дал мне набор имен. Он содержал слово, которое было точным соответствием, а также слова, которые были похожи ...

вот что я сделал:

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();

Теперь я хочу ... например.

если в базе данных есть три слова

абв123

XYZ123

pqc1238

Теперь, если слово 123, оно должно вернуть abc123 и xyz123 если c123, тогда вернуть abc123, а НЕ pqc1238 и xyz123

если 238, тогда просто вернуть pqc1238 ....

Надеюсь, я был достаточно ясен ... поверь мне, я тоже не понял в первый раз

любые предложения лучше найти точное совпадение между словами .. потому что LIKE не достаточно ..

Спасибо

Ответы [ 7 ]

2 голосов
/ 29 января 2010

Я бы не назвал это ТОЧНОЕ совпадение, но если вы ищете слова, оканчивающиеся на данное слово, попробуйте:

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

нет второго%

2 голосов
/ 29 января 2010

Вы понимаете это почти правильно, но вы не понимаете подстановочный знак%.

В SQL подстановочный знак% будет соответствовать любой строке любой длины. Вы хотите этого с самого начала, потому что вас не интересуют главные роли.

Однако, если вы поместите его в конец вашей совпадающей строки, как LIKE, будет разрешено совпадение, если что-то идет после вашей строки.

Итак, взяв ваш пример

абв123

XYZ123

pqc1238

Теперь, если слово равно 123, оно должно вернуть abc123 и xyz123, если c123, тогда вернуть abc123 и> НЕ pqc1238 и xyz123

если 238, тогда просто вернуть pqc1238 ....

У вас есть% 123%, вы говорите: «Я хочу, чтобы все строки начинались с чего-либо, затем с« 123 », а затем заканчивались чем-нибудь». Это будет соответствовать любой строке, которая содержит «123» в любой точке.

То, что вы хотите сказать, это «Я хочу, чтобы все строки начинались с чего-либо, затем имели« 123 », а затем заканчивались». Итак, это% 123.

Наконец, чтобы получить ТОЧНОЕ совпадение с подобным, просто уберите все подстановочные знаки.

Эта страница содержит довольно хороший обзор подстановочных знаков SQL.

1 голос
/ 29 января 2010

Мне кажется, что вам нужны все записи, которые заканчиваются конкретным словом. В этом случае вам просто нужно удалить последний «%», который вы добавили в запрос.

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

Надеюсь, это то, что вам нужно

1 голос
/ 29 января 2010

Почему бы вам не попробовать использовать LINQ? Сделай что-то вроде;

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

Надеюсь, это поможет.

1 голос
/ 29 января 2010

Читается так, как будто вы хотите команду вида выберите Имена из машин, где такие имена, как "% xxx" , где "xxx" - ваше слово

Если это так, и @userName - ваше слово, тогда вы хотите что-то вроде

SqlCommand sqlCmd = new SqlCommand("SELECT Names FROM Machines WHERE Name  Like '%' + @userName", connection);
1 голос
/ 29 января 2010

Мне кажется, вы ищете строку, заканчивающуюся @ userName.

SqlCommand sqlCmd = new SqlCommand("SELECT Names FROM Machines WHERE Name  Like '%' + @userName", connection);
1 голос
/ 29 января 2010

Из того, что я понимаю, кажется, что вам нужна только строка, оканчивающаяся шаблоном поиска, поэтому все, что вам нужно сделать, это пропустить последний "%" из вашего выбора.

SqlCommand sqlCmd = new SqlCommand("SELECT Names FROM Machines WHERE Name  Like '%" + @userName + "'", connection);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...