powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выбрать строки, содержащие минимум два символа из набора
4 сообщений из 4, страница 1 из 1
Выбрать строки, содержащие минимум два символа из набора
    #39637735
Добрый день всем.
Прошу совета в таком вопросе.

Есть набор символов, например: а,б,в,г,д
Нужно выбрать из таблицы строки, содержащие по меньшей мере два РАЗНЫХ символа из этого набора
То есть простой
Код: sql
1.
like '%[абвгд]%[абвгд]%' 

не подойдет, т.к. например из двух строк "рама","еда" он вернет обе, а нужно, чтобы только "еда"

То есть, как я это себе представляю, нужно какое то последовательное сравнение строки с этим набором символов - в "рама" ищется любой из "абвгд", затем любой из "бвгд" и т. д., но как это реализовать - не пойму.
...
Рейтинг: 0 / 0
Выбрать строки, содержащие минимум два символа из набора
    #39637752
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
declare @t table (s varchar(100));
insert into @t
values
 ('рама'), ('еда');

declare @p table (c char(1) primary key);
insert into @p
values
 ('а'), ('б'), ('в'), ('г'), ('д');
 
select
 t.s
from
 @t t
where
 exists(select * from @p where charindex(c, t.s) > 0 having count(*) > 1);
...
Рейтинг: 0 / 0
Выбрать строки, содержащие минимум два символа из набора
    #39637772
invm
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
declare @t table (s varchar(100));
insert into @t
values
 ('рама'), ('еда');

declare @p table (c char(1) primary key);
insert into @p
values
 ('а'), ('б'), ('в'), ('г'), ('д');
 
select
 t.s
from
 @t t
where
 exists(select * from @p where charindex(c, t.s) > 0 having count(*) > 1);



Спасибо
Я делал примерно так же:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
WITH CTE AS(
SELECT 'а' AS letter
UNION
SELECT 'б' 
UNION
SELECT 'в' 
UNION
SELECT 'г' 
UNION
SELECT 'д' 
)

SELECT column FROM Table1, CTE
WHERE column like '%'+letter+'%' 
.GROUP BY column 
HAVING COUNT(*)>1 



Может быть есть какое-то решение через парсинг, чтобы не городить вторую таблицу?
...
Рейтинг: 0 / 0
Выбрать строки, содержащие минимум два символа из набора
    #39637809
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
declare @t table (s varchar(100));
insert into @t
values
 ('рама'), ('еда');

declare @n table (n int);
insert into @n
values
 (1), (2), (3), (4), (5), (6);


 with x as ( select t.s, c = substring(s, n.n, 1) from @t as t inner join @n as n on n.n <= len(s) )
    , y as ( select * from x where charindex( c, 'абвгд' ) > 0 )
  select * from @t as t where exists( select * from y inner join y as y1 on y1.s = y.s and y1.c <> y.c where y.s = t.s )
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выбрать строки, содержащие минимум два символа из набора
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]