Cách tiếp cận này sử dụng một trình tạo số và sau đó chỉ kiểm tra độ dài của sự chồng chéo:
select x.drug_name, x2.drug_name, MAX(c.seqnum) as OverlapLen
from x cross join
x x2 cross join
(select ROW_NUMBER() over (order by (select NULL)) seqnum
from INFORMATION_SCHEMA.COLUMNS c
) c
where LEFT(x.drug_name, c.seqnum) = LEFT(x2.drug_name, c.seqnum) and
len(x.drug_name) >= c.seqnum and len(x2.drug_name) >= c.seqnum
group by x.drug_name, x.drug_name
order by x.drug_name, OverlapLen desc
Điều này giả định rằng information_schema.columns
có đủ hàng cho các tên thuốc dài hơn.
Điều này tham gia x
với chính nó và sau đó tham gia vào một danh sách các số. where
điều khoản đang kiểm tra ba điều kiện:(1) rằng phần bên trái của mỗi tên thuốc giống nhau cho đến seqnum; (2) độ dài của mỗi tên thuốc nhỏ hơn hoặc bằng seqnum.
Sau đó, tập hợp sẽ lấy từng cặp và chọn giá trị cao nhất của seqnum - đây sẽ là kết quả phù hợp chuỗi con dài nhất.