Sinceramente io non farei due cicli... semplicemente scorrerei tutta la tabella operando i controlli:
non la stessa lunghezza? leggi un altro;
scorro i caratteri della stringa dell'utente:
- carattere esiste? aggiungo 1 al contatore ed elimino il carattere trovato nella stringa letta dal db
- se il contatore > di quello memorizzato:
- - sostituisco elemento trovato a quello memorizzato
esempio minimale, didatticamente prolisso ove occorre, da personalizzare
codice:
<%
adoCon = apriDatabase() ' metti la tua
len_trovato = 0
elem_trovato = 0
' acquisisco cercato
cercato = lcase("Kxxxx") ' metti la tua
lungo = Len(cercato)
' leggo il recordset -> rs
Set rs = adoCon.execute("select campo from tabella") ' metti la tua query
Do Until rs.eof
campo = Trim(LCase(rs("campo"))) ' personalizza
contatore = 0
If Len(campo) = lungo Then ' gli altri li scarto
For i = 1 To lungo
c = Mid(cercato, i, 1)
l = InStr(campo, c)
If l > 0 Then
contatore = contatore + 1
campo = Left(campo, l - 1)&Mid(campo, l + 1)
End If
Next
If contatore > len_trovato Then
len_trovato = contatore
elem_trovato = rs("campo") ' personalizza
End If
End If
rs.movenext
Loop
chiudiCon() ' la tua...
response.write len_trovato&" "&elem_trovato
%>
ps: meno di 2 secondi per trattare 217713 records