这里有一个解决方案。
这使用
Alan Burstein's tally table Number function
DECLARE @T1 TABLE ([ID] int, [Information] Nvarchar(16)) ;
INSERT INTO @T1 (ID ,Information)
VALUES
(1, N'ABCDEF12.domain'),
(2, N'domain.ABCDEF12'),
(3, N'XYZABC123.22.26'),
(4, N'222-XYZABC123-26'),
(5, N'YYYYYYYYYYYYYYYY'),
(6, N'AAAAAAAAAAAAAAAA'),
(7, N'XYZABC123'),
(8, N'ABCDEF12'),
(9, N'123456789.1.2')
;
SELECT DISTINCT
T.ID,T.Information
FROM @T1 T
CROSS APPLY dbo.getNums(1, LEN(T.Information), 1, 1) N
INNER JOIN
@T1 T1 ON ( SUBSTRING(T.Information, N, LEN(T.Information)) LIKE '%' + T1.Information + '%' OR
SUBSTRING(T1.Information, N, LEN(T1.Information)) LIKE '%' + T.Information + '%'
)
AND ( LEN(SUBSTRING(T1.Information, N, LEN(T1.Information))) > 8 OR
LEN(SUBSTRING(T.Information, N, LEN(T.Information))) > 8
)
AND T1.ID <> T.ID
输出
ID Information
4 222-XYZABC123-26
8 ABCDEF12
1 ABCDEF12.domain
2 domain.ABCDEF12
7 XYZABC123
3 XYZABC123.22.26