Искать текст в столбце - PullRequest
       2

Искать текст в столбце

0 голосов
/ 23 октября 2019

У меня есть страница ASP.NET и таблица выглядит так:

Create table Test(id int, Users Varchar(MAX));
Insert into Test select 1, 'admin;operator;user1';
Insert into Test select 2, 'superadmin';
Insert into Test select 3, 'superadmin;admin';

В любой строке теста может быть несколько пользователей, поэтому я делю их на точки с запятой. Я хочу вернуть значение, когда клиент ищет в текстовом поле, они будут вставлять только: admin Я хочу вернуть только те строки, которые включают в себя admin .

Я могуне использовать

select id,Users where Users like '%admin%' 

Потому что в этом случае запрос будет возвращать 2-й и 3-й столбцы, в которые входит суперадмин.

Как получить истинный результат?

Ответы [ 3 ]

4 голосов
/ 23 октября 2019

Вы не должны хранить данные с разделителями, если это возможно, нормализовать вашу базу данных. Поскольку это не всегда возможно, вы можете получить то, что вы хотите:

where CONCAT(';', Users, ';') like '%;admin;%' 
1 голос
/ 23 октября 2019

Как я уже упоминал в комментарии, вам нужно исправить свой дизайн;то, что вы делаете сейчас, нарушает одно из основных правил нормальной формы. Это означает, что вместо этого у вас должна быть одна строка для каждого пользователя:

CREATE TABLE Test (uid int IDENTITY,
                   id int,
                   Username nvarchar(128));
INSERT INTO Test (id,
                  Username)
VALUES (1, N'admin'),
       (1, N'operator'),
       (1, N'user1'),
       (2, N'supermadmin'),
       (3, N'superadmin'),
       (3, N'admin');

Тогда вы можете просто использовать оператор =:

SELECT *
FROM Test
WHERE Username = N'admin';
0 голосов
/ 23 октября 2019

Я думаю, вы можете попробовать ниже запрос

SELECT * FROM #tmpTest where users like '%Admin%' AND Users not like 'superAdmin'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...