Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выбрать строки, содержащие минимум два символа из набора / 4 сообщений из 4, страница 1 из 1
27.04.2018, 21:19
    #39637735
Выбрать строки, содержащие минимум два символа из набора
Добрый день всем.
Прошу совета в таком вопросе.

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

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

То есть, как я это себе представляю, нужно какое то последовательное сравнение строки с этим набором символов - в "рама" ищется любой из "абвгд", затем любой из "бвгд" и т. д., но как это реализовать - не пойму.
...
Рейтинг: 0 / 0
27.04.2018, 22:59
    #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
28.04.2018, 00:33
    #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
28.04.2018, 06:34
    #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
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выбрать строки, содержащие минимум два символа из набора / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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