Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Намерете sql записи, съдържащи подобни низове

Ако наистина искате да дефинирате сходството по точния начин, който сте формулирали във вашия въпрос, тогава ще трябва - както казвате - да приложите изчислението на разстоянието на Левенщайн. Или в код, изчислен за всеки ред, извлечен от DataReader, или като функция на SQL Server.

Посоченият проблем всъщност е по-сложен, отколкото може да изглежда на пръв поглед, защото не можете да предположите, че знаете какво взаимно споделят елементи между два низа могат да бъдат.

Така че в допълнение към Разстоянието на Левенщайн вероятно искате да посочите и минимален брой последователни знаци, които действително трябва да съвпадат (за да се заключи достатъчно сходство).

Накратко:Звучи като прекалено сложен и отнемащ време/бавен подход.

Интересното е, че в SQL Server 2008 имате функцията DIFFERENCE, която може да се използва за нещо подобно.

Той оценява фонетичната стойност на два низа и изчислява разликата. Не съм сигурен дали ще го накарате да работи правилно за изрази от няколко думи, като заглавия на филми, тъй като не се справя добре с интервали или числа и поставя твърде много акцент върху началото на низа, но все пак е интересен предикат, за който трябва да се знае.

Ако това, което сте всъщност опитът да се опише е някаква функция за търсене, тогава трябва да разгледате възможностите за пълно текстово търсене на SQL Server 2008. Той осигурява вградена поддръжка на тезаурус, фантастични SQL предикати и механизъм за класиране за "най-добри съвпадения"

РЕДАКТИРАНЕ:Ако искате да премахнете дубликатите, може би бихте могли да разгледате размито търсене на SSIS и трансформация на размита група. Самият аз не съм пробвал това, но изглежда като обещаващ повод.

РЕДАКТИРАНЕ 2:Ако не искате да ровите в SSIS и все още се борите с производителността на алгоритъма за разстояние на Левенщайн, може би бихте могли да опитате този алгоритъм, който изглежда по-малко сложен.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Направете, а не нарушавайте производителността на SQL Server

  2. Изчислете работното време между две дати

  3. SCOPE_IDENTITY() за GUID?

  4. Проблеми с производителността на SQL Server 2012 Enterprise Edition при лицензиране на CAL

  5. SQL GROUP BY CASE оператор с агрегатна функция