Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tìm tất cả các chuỗi có ít nhất X ký tự, sắp xếp theo kiểu tương tự

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để thực hiện GROUP BY trên một cột bí danh trong MS-SQL Server?

  2. Cách xóa các hàng trùng lặp hoàn toàn

  3. Làm cách nào để tạo bảng bằng cách sử dụng truy vấn chọn trong SQL Server?

  4. Tôi cần quyền nào để sử dụng Tham số có giá trị bảng SQL Server (TVP) làm tham số proc được lưu trữ?

  5. Sử dụng T-SQL, trả về phần tử được phân tách thứ n từ một chuỗi