how to select record whose matching percentage is higher than other using like operator in sql server?

后端 未结 3 902
温柔的废话
温柔的废话 2021-01-14 23:45

I have set of records which I need to search using criteria. But criteria is returning me multiple rows.

So I need top 2 records which are having maximum percentage

相关标签:
3条回答
  • 2021-01-15 00:23

    As far as I understand you need something like Fuzzy String Matching using Levenshtein Distance Algorithm. Hope the link will be helpful.

    You need to calculate distance between CountryName and search pattern. It's not exactly the "percentage", but it can measure the relevance.

    Maybe this solves your problem?

    SELECT TOP 2 FirstName, LastName, CountryName, StateName 
    FROM Employee
    WHERE
        statename like '%Gujarat%' AND countryname like '%India%'
    ORDER BY
        dbo.edit_distance(statename, 'Gujarat') + dbo.edit_distance(CountryName, 'India') DESC
    
    0 讨论(0)
  • 2021-01-15 00:30

    You could use Full text search. Using ContainsTable you can get a RANK for each record describing how weel it fit the search pattern. Then you can order your results by that rank and then use select top N to get only the best N results.

    Implementing full text search is easy and fast, specially if you need simple queries like yours.

    Resources:

    • Implementing full text search and basic usage.
    • Part 3 of a series, focused on ranked queries with containstable and freetexttable.
    • ContainsTable reference. Also you can find a lot of info about this here on stackoverflow.

    Hope it helps.

    0 讨论(0)
  • 2021-01-15 00:34

    Given solutions not worked for me,

    So I created my own logic:

    SELECT TOP 2 FirstName, LastName, CountryName, StateName 
    FROM Employee
    WHERE
        statename like '%Gujarat%' AND countryname like '%India%'
    ORDER BY
        LEN(StateName + CountryName) - LEN(REPLACE(StateName, 'Gujarat', '') + REPLACE(CountryName, 'India', '')) DESC
    

    Hope this help...

    0 讨论(0)
提交回复
热议问题