我有一个数据库,我需要搜索双重登录。
类型:字符
示例:
Display: block;
我需要找到像15/17-Abc这样的用户,双重登录,但不同的第一个数字 我如何搜索登录? (我有成千上万的人)
答案 0 :(得分:0)
exists
查找第二部分的匹配项。一种方法是拆分字符串。另一个是使用字符串操作函数:
select t.*
from t
where login like '%-%' and
exists (select 1
from t t2
where t2.login <> t.login and
t2.login like '%-%' and
substring(t2.login, charindex('-', t2.login), len(t2.login)) = substring(t.login, charindex('-', t.login), len(t.login))
);
答案 1 :(得分:0)
通过这种方式,您可以找到所有重复的部分:
declare @t table (col varchar(100));
insert into @t values
('15-Abc'),
('15-Deg'),
('17-Abc');
select substring(col, 3, len(col))
from @t
group by substring(col, 3, len(col))
having count(*) > 1;
如果您希望原始表的行使用此代码:
declare @t table (col varchar(100));
insert into @t values
('15-Abc'),
('15-Deg'),
('17-Abc');
with cte as
(
select substring(col, 3, len(col)) as same_part
from @t
group by substring(col, 3, len(col))
having count(*) > 1
)
select *
from @t t
where exists(select * from cte c where substring(t.col, 3, len(col)) = c.same_part);