这应该做到(演示)
SELECt DISTINCT CA.colstrFROM str_matching s1 JOIN str_matching s2 ON s1.colstr <> s2.colstr AND s2.colstr LIKE '%' + s1.colstr CROSS APPLY (VALUES(s1.colstr), (s2.colstr)) CA(colstr)
但是,如果
str_matching有很多行,性能将会很差。在字符串的反面添加索引可以大大改善-如下例所示。
CREATE TABLE str_matching( colstr varchar(200), colstr_rev AS REVERSe(colstr));CREATE INDEX ix_colstr_rev on str_matching(colstr_rev)SELECt colstr = REVERSe(CA.colstr_rev)FROM str_matching s1 JOIN str_matching s2 ON s1.colstr_rev <> s2.colstr_rev AND s2.colstr_rev LIKE s1.colstr_rev + '%' CROSS APPLY (VALUES(s1.colstr_rev), (s2.colstr_rev)) CA(colstr_rev) GROUP BY CA.colstr_rev



