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

Pencocokan Fuzzy SQL

Solusi spesifik domain yang agak cepat mungkin untuk menghitung kesamaan string menggunakan SOUNDEX dan jarak numerik antara 2 string. Ini hanya akan sangat membantu jika Anda memiliki banyak kode produk.

Menggunakan UDF sederhana seperti di bawah ini Anda dapat mengekstrak karakter numerik dari string sehingga Anda kemudian bisa mendapatkan 2200 dari 'CLC 2200npk' dan 1100 dari 'CLC 1100' sehingga Anda sekarang dapat menentukan kedekatan berdasarkan output SOUNDEX dari setiap input serta kedekatan komponen numerik dari setiap input.

CREATE Function [dbo].[ExtractNumeric](@input VARCHAR(1000))
RETURNS INT
AS
BEGIN
    WHILE PATINDEX('%[^0-9]%', @input) > 0
    BEGIN
        SET @input = STUFF(@input, PATINDEX('%[^0-9]%', @input), 1, '')
    END
    IF @input = '' OR @input IS NULL
        SET @input = '0'
    RETURN CAST(@input AS INT)
END
GO

Sejauh algoritme tujuan umum berjalan, ada beberapa yang dapat membantu Anda dengan berbagai tingkat keberhasilan tergantung pada ukuran kumpulan data dan persyaratan kinerja. (kedua tautan memiliki implementasi TSQL yang tersedia)

  • Metafon Ganda - Algo ini akan memberi Anda kecocokan yang lebih baik daripada soundex dengan mengorbankan kecepatan, namun sangat bagus untuk koreksi ejaan.
  • Levenshtein Distance - Ini akan menghitung berapa banyak penekanan tombol yang diperlukan untuk mengubah satu string menjadi string lain misalnya untuk berpindah dari 'CLC 2200npk' ke 'CLC 2200' adalah 3, sedangkan dari 'CLC 2200npk' ke 'CLC 1100' adalah 5.

Berikut adalah artikel menarik yang menerapkan kedua algos secara bersamaan yang dapat memberi Anda beberapa ide.

Semoga beberapa di antaranya bisa sedikit membantu.

EDIT:Ini adalah implementasi Jarak Levenshtein parsial yang jauh lebih cepat (baca posting itu tidak akan mengembalikan hasil yang sama persis dengan yang normal). Pada tabel pengujian saya yang terdiri dari 125.000 baris, ini berjalan dalam 6 detik dibandingkan dengan 60 detik untuk yang pertama saya tautkan.




  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 Mengaktifkan/Menonaktifkan Akses Data di SQL Server (Contoh T-SQL)

  2. Cara Membuat Database Online Dari Restore Mode di SQL Server

  3. Alternatif fungsi lead lag di SQL Server 2008

  4. DECODE() fungsi di SQL Server

  5. Ambil nama kolom dan jenis prosedur tersimpan?