在数据库表的某列中查找最长匹配子序列

时间:2015-02-04 16:50:11

标签: sql sql-server ssms

我想编写一个UDF,它将一个字符串作为User的参数。然后该函数必须在表的该列中找到最长的匹配序列/子序列。

例如, 表名 - >患者 列名称 - >姓

现在,如果用户传递了一个字符串,我们就说Johni到这个函数,FirstName列有'Johna',JohnDoeJohi, Simran`

该函数应返回一个表,其值按降序递减,即

  1. Johna
  2. JOHNDOE
  3. Johi
  4. 不应返回

    Simran。我对在列值中进行此搜索毫无头绪。

1 个答案:

答案 0 :(得分:2)

使用Difference功能

SELECT a,Difference('Johni', a)
FROM   (SELECT 'Johna' a
        UNION
        SELECT 'JohnDoe'
        UNION
        SELECT 'Johi'
        union 
        select 'Simran') o
        where Difference('Johni', a)>=3
ORDER  BY Difference('Johni', a) DESC 

更新:从表中选择

SELECT FirstName
FROM   yourtable
WHERE  Difference('Johni', FirstName) >= 3
ORDER  BY Difference('Johni', FirstName) DESC