Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Temukan semua string yang memiliki setidaknya X karakter, urutkan berdasarkan kemiripan

Pendekatan ini menggunakan generator angka dan kemudian hanya menguji panjang tumpang tindih:

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

Ini mengasumsikan bahwa information_schema.columns memiliki baris yang cukup untuk nama obat yang lebih panjang.

Ini bergabung dengan x untuk dirinya sendiri dan kemudian bergabung dalam daftar nomor. where klausa yang memeriksa tiga kondisi:(1) bahwa bagian kiri setiap nama obat sama sampai seqnum; (2) bahwa panjang setiap nama obat kurang dari atau sama dengan seqnum.

Agregasi kemudian mengambil setiap pasangan dan memilih nilai seqnum tertinggi -- ini harus menjadi kecocokan substring terpanjang.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara menggunakan variabel string dalam pernyataan sql

  2. Ekstrak URL dari situs web?

  3. 3 Area yang Akan Diuntungkan dari Menggunakan Alat Pemantauan Kinerja SQL Server

  4. pilih satu baris per ID

  5. Cari beberapa nilai dalam kolom xml di SQL